3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Tkinterで簡単なログ取りを作成

Posted at

学部生時代に自分の学習用に作ったログ取りプログラムを突貫工事で作ってみました。

昔(学部2年時)はC++(Qt)を使って作成しましたが、今回は面倒だったのでPythonのTkinterを使って作ってみました。

開発環境

MacOS High Sierra 10.13.2

Python 3.6.4

tkinter

どんなものを作る?

昔作ったときのコンセプトとしては、

  • 一言のメモをどんどん蓄積していく
  • 時系列順(年月日秒)にログが残っていく
  • 邪魔にならないような小さいウィンドウ
  • クロスプラットフォーム

こんな感じでした。
WebのURLと一言コメントを一緒に残したり、教授がぼそっと言った言葉なんかを拾い上げてました。

Tkinterとは

いろいろな方が説明されているので、ここでは省きます。
ものすごく簡単に言えば、PythonでGUIを作ることができるキットです。

実装

起動時処理としては、

  1. ログを保存する場所を決める(初回のみ)
  2. メニューとテキストフィールドを用意する
  3. キーバインドとコールバック関数の設定
    となっております。

ログを保存する場所を決める(初回のみ)

def initProcess(self):
        """
        初期化処理
        コンフィグファイルから設定を読み込み、Logger/[年]/[月日].txtを作る
        """
        self.checkExistFile(CONFIGFILE_NAME) #コンフィグファイルの存在を確認

        with open(CONFIGFILE_NAME) as f:
            self.rootDirPath = f.read() # Logを保存するディレクトリパスを取得

        if self.rootDirPath == "": # ディレクトリパスが無かったら、新しく設定する
            self.selectRootDir()
            with open(CONFIGFILE_NAME,'w') as f:
                f.write(self.rootDirPath)

        if os.path.isdir(self.rootDirPath + LOGDIR_NAME) == False: # Logディレクトリが無かったら新しく作成する
            print(self.rootDirPath+LOGDIR_NAME)
            os.mkdir(self.rootDirPath+LOGDIR_NAME)

def selectRootDir(self):
        """
        ログを保存するディレクトリを選択するダイアログを出す
        """
        root = tkinter.Tk()
        root.withdraw()

        root.overrideredirect(True)
        root.geometry('0x0+0+0')

        root.deiconify()
        root.lift()
        root.focus_force()

        self.rootDirPath = tkFileDialog.askdirectory(parent=root)
        root.destroy()

メニューとテキストフィールドを用意する

def __init__(self,master=None):
        """
        コンストラクタ
        初期化処理を行う
        """
        tkinter.Frame.__init__(self,master)  # Logger本体のフレームを初期化
        self.font = 'メイリオ'                # フォント設定
        self.master.title("Logger")          # フレームタイトルの設定
        self.config(width=20,height=20)      # フレームサイズの設定

        self.fileMgr = FileManager()         # ファイル管理クラスインスタンスを作成

        # ログ書き込み部とメニュー部の初期化
        self.createTextField()
        self.createMenu()
        self.master.configure(menu=self.menu)

        self.pack()

    def createTextField(self):
        """
        テキストフィールドを作成する
        """
        self.txt = tkinter.scrolledtext.ScrolledText(self.master,width=30, height=10, font=(self.font, '15'))
        self.txt.pack(fill=tkinter.BOTH, expand=1)

    def createMenu(self):
        """
        メニューを作成する
        """
        self.menu = tkinter.Menu(self.master)
        me = tkinter.Menu(self.master)
        me.add_command(label='new')
        self.menu.add_cascade(menu=me,label='file')

キーバインドとコールバック関数の設定

def __init__(self,master=None):
        """
        コンストラクタ
        初期化処理を行う
        """
        tkinter.Frame.__init__(self,master)  # Logger本体のフレームを初期化
        self.font = 'メイリオ'                # フォント設定
        self.master.title("Logger")          # フレームタイトルの設定
        self.config(width=20,height=20)      # フレームサイズの設定

        self.fileMgr = FileManager()         # ファイル管理クラスインスタンスを作成

        # ログ書き込み部とメニュー部の初期化
        self.createTextField()
        self.createMenu()
        self.master.configure(menu=self.menu)

        # キーバインド設定
        self.master.bind("<Control-Key-s>",self.save)
        self.master.bind("<Control-Key-r>",self.changeRootDir)

        self.pack()

def save(self,event):
        """
        コールバック関数
        テキストフィールドにある文字列を保存する
        """
        self.fileMgr.write(self.txt.get('1.0', tk.END))
        self.txt.delete('1.0',tk.END)

    def changeRootDir(self,event):
        self.fileMgr.changeRootDirPath()

ソースコード

ちょっとしたソースコードですが一応公開しておきます.こちら

最後に・・・

本当にメモが大事だということに気づいて、必死に作った思い出。
懐かしく思ったが、昔のはもうちょっと機能をもたせていた気がする・・・。
PyInstallerとか使えばバイナリ化できるし、なんとか会社で使ってみようと思います。

「お、日本語が入力できんがな!」となって原因調べようと思ったけど、英語の勉強にはちょうどいいので放置しました。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?