tkinterで忘れがちなこと色々 其の4

いつもPyrhonプログラムを作るときに調べながら作るけどもすぐ忘れてしまう。なのでメモを残しておこうと。其の4。


目次

  1. tkinter.Frameを継承してカスタマイズGUIパーツを定義
  2. スクロールバー付きテキストボックス(tkinter.scrolledtext)
  3. OK/キャンセル付きメッセージボックス(tkinter.messagebox.askokcancel)
  4. カラー選択パレット(tkinter.colorchooser.askcolor)
  5. tkinter関連の記事一覧

tkinter.Frameを継承してカスタマイズGUIパーツを定義

import tkinter


class KeyValueEntry(tkinter.Frame):
    def __init__(self, root, default_val=None, key_kw=dict(), val_kw=dict()):
        super().__init__(root)
        self.key = tkinter.Label(self, key_kw)
        self.val = tkinter.Entry(self, val_kw)
        if default_val:
            self.val.insert(0, default_val)

    def pack(self, **kw):
        kw.update({"expand": True, "fill": tkinter.X})
        super().pack(kw)
        self.key.pack(side=tkinter.LEFT)
        self.val.pack(side=tkinter.LEFT, expand=True, fill=tkinter.X)

    def get(self):
        return self.val.get()

if __name__ == '__main__':
    root = tkinter.Tk()
    kv1 = KeyValueEntry(root, key_kw={"text": "key1", 'width': 10}, default_val="val1")
    kv2 = KeyValueEntry(root, key_kw={"text": "key2", 'width': 10}, default_val="val2")
    kv3 = KeyValueEntry(root, key_kw={"text": "key3", 'width': 10}, default_val="val3")
    kv1.pack(padx=5, side=tkinter.TOP)
    kv2.pack(padx=5, side=tkinter.TOP)
    kv3.pack(padx=5, side=tkinter.TOP)
    print(kv1.get())
    print(kv2.get())
    print(kv3.get())
    tkinter.mainloop()

exit()

実行結果は以下の通り。

LabelとEntryを組み合わせて使うことが多いので、あらかじめ組み合わせたクラスを作成した例。


スクロールバー付きテキストボックス(tkinter.scrolledtext)


import tkinter.scrolledtext

if __name__ == '__main__':
    root = tkinter.Tk()
    st = tkinter.scrolledtext.ScrolledText(root, width=30, height=10)
    st.pack()
    st.insert(1.0, "hogehoge")
    print(st.get(1.0, tkinter.END))
    tkinter.mainloop()

実行結果は以下の通り。

長い文字列の入力、出力を扱いたい場合に便利。値の入力はinsert()で、値の取得はget()で可能。

OK/キャンセル付きメッセージボックス(tkinter.messagebox.askokcancel)

import tkinter.messagebox

if __name__ == '__main__':
    okng = tkinter.messagebox.askokcancel(title="title", message="message")
    print(okng)

実行結果は以下の通り。

返り値にはbool(True/False)が返ってくる。尚、mkinter.messagebox.askquestionもほぼ同じ動作をする(返り値にstrのyes/noが返ってくる)。

カラー選択パレット(tkinter.colorchooser.askcolor)

import tkinter.colorchooser

if __name__ == '__main__':
    color = tkinter.colorchooser.askcolor()
    print(color)

実行結果は以下の通り。

返り値は選択した色のtupleが返ってくる。例えばこんな感じ"((160.625, 160.625, 160.625), '#a0a0a0')"。キャンセルを選択すると(None, None)が返る。

tkinter関連の記事一覧


コメント

このブログの人気の投稿

Python SQLite スレッド間でコネクションの使いまわしは出来ない

slackでgeneralの投稿を全削除する

Google location history(JSON形式)をCSVファイルにする