今回はタブを複数持つGUIウィンドウをpython/tkinterで作ろうと思います。
TkinterのNotebook, Frameを使用します。
目次
完成したGUIウィンドウ

早速、完成したGUIウィンドウを示しました。
ウィンドウには名前「Test title」がついていて、その中でタブが3つ用意されています。
各タブを選択すると、それぞれのタブの中身が表示される、というとてもシンプルな例です。
ソースコード
上記のGUIウィンドウを作成するコードが下記です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
#tab.py #タブを3つ持つGUIウィンドウを作成する。 #import import tkinter as tk import tkinter.ttk as ttk def main(): #メインウィンドウ作成 main_view = tk.Tk() #メインウィンドウのタイトルを変更 main_view.title("Test title") #メインウィンドウの大きさを設定 main_view.geometry("1000x500") #メインウィンドウにnotebookを作成する。 nb = ttk.Notebook(main_view) #notebookに関するフレームを3つ作る。 tab1 = tk.Frame(nb) tab2 = tk.Frame(nb) tab3 = tk.Frame(nb) #notebookに対してtab1, 2, 3をそれぞれ追加する。 nb.add(tab1, text="tab1", padding=3) nb.add(tab2, text="tab2", padding=3) nb.add(tab3, text="tab3", padding=3) #メインフレームでのnotebook配置を決定する。 nb.pack(expand=1, fill="both") #各タブの内容を記載する。 tab1_main(tab1) tab2_main(tab2) tab3_main(tab3) #main_viewを表示する無限ループ main_view.mainloop() return 0 def tab1_main(tab1): #文字を表示する。 param_name = tk.Label(tab1, text="タブ1の内容") param_name.place(x=10, y=10) return 0 def tab2_main(tab2): #文字を表示する。 param_name = tk.Label(tab2, text="タブ2の内容") param_name.place(x=10, y=20) return 0 def tab3_main(tab3): #文字を表示する。 param_name = tk.Label(tab3, text="タブ3の内容") param_name.place(x=10, y=30) return 0 if __name__ == "__main__": main() |
イメージとしては、
- ウィンドウという箱(main_view)を作り、
- それの中にNoetebook(nb)を作成、
- このNotebookの中に、フレーム(tab1, tab2, tab3)を3つ追加してタブにし、
- 最後に表示させる
という感じです。
下記は詳細です。
ウィンドウという箱を作り、動かす
1 2 3 4 5 6 7 8 9 10 11 12 |
#メインウィンドウ作成 main_view = tk.Tk() #メインウィンドウのタイトルを変更 main_view.title("Test title") #メインウィンドウの大きさを設定 main_view.geometry("1000x500") #main_viewを表示する無限ループ main_view.mainloop() |
この部分で、タイトル付きのウィンドウを大きさ指定で作られます。
最後の一行はこのウィンドウを維持するためのmainloopです。
ウィンドウの中にNotebookを作成
1 2 3 4 5 |
#メインウィンドウにnotebookを作成する。 nb = ttk.Notebook(main_view) #メインフレームでのnotebook配置を決定する。 nb.pack(expand=1, fill="both") |
これはタブを載せる土台です。
このnotebookにどんどんタブフレームを載せていくことになります。
packでmain_viewに配置しています。
フレームを定義して、notebookに追加
1 2 3 4 5 6 7 8 9 |
#notebookに関するフレームを3つ作る。 tab1 = tk.Frame(nb) tab2 = tk.Frame(nb) tab3 = tk.Frame(nb) #notebookに対してtab1, 2, 3をそれぞれ追加する。 nb.add(tab1, text="tab1", padding=3) nb.add(tab2, text="tab2", padding=3) nb.add(tab3, text="tab3", padding=3) |
ここがタブを作成、notebookに追加している部分です。
各タブ内の処理
1 2 3 4 5 |
def tab1_main(tab1): #文字を表示する。 param_name = tk.Label(tab1, text="タブ1の内容") param_name.place(x=10, y=10) return 0 |
例としてtab1の場合を示しています。
テキストが格納されているラベルを用意して、それを座標指定で配置しています。
例ではtabごとに文字の内容と位置を変えています。
このようにして複数タブを持つウィンドウを作成することができました!
コメント