【Python tkinter】複数のタブを実装したGUIアプリの作成(Notebookウィジェット)
2021.05.04 /
本記事では、Pythonのtkinterを使用して作成するGUIアプリに、複数のタブを追加する方法について解説していきます。
一つの画面に様々な機能をまとめていると、見た目や使いやすさが悪くなり、ユーザビリティが良くないです。
そこでタブを使って機能を分けることで、ユーザビリティの改善が見込めます。
ぜひ本記事で紹介しているタブの実装方法を身に着けて、ご自身のGUIアプリにタブを追加してみてください。
tkinterの基本的な使い方がわからない方は以下記事をご参照ください。
【Python】tkinterを使ったGUIアプリケーションの作成方法
本記事を通して以下の知識を学べます。
- tkinterのウィジェットについて
- Notebookウィジェットについて
- タブを実装する方法について
Notebookウィジェット
tkinter.ttkのウィジェットについて
PythonでGUIアプリケーションを作成するには、標準ライブラリであるtkinterを使用します。
そのtkinterには、GUIアプリケーションを形作るためのウィジェットが多く存在します。
そのウィジェットには、ButtonやEntryウィジェットなどを含めて12種類のウィジェットがあります。
【Python/Tkinter】Label(ラベル)の使い方:文字フォント・サイズ・色・配置の設定
【Python Tkinter】Button(ボタン)の使い方:オプション引数一覧(サイズ・配置・外観)
そしてtkinterをよりモダンにしたtkinter.ttkには、tkinterの12個のウィジェットにプラス6種類の全18種類のウィジェットが用意されています。
【Python】ttk:tkinterと比べた各ウィジェットの外観と機能面の違い
【Python】ttk:Label(ラベル)の使い方(フォント・サイズ・色のオプション設定)
【Python】ttk:Button(ボタン)の使い方(外観設定・オプション一覧・スタイル設定)
本記事で解説するNotebookウィジェットはtkinter.ttkの中に含まれます。
このNotebookウィジェットについて詳しく見ていきましょう。
Notebookウィジェットとは
tkinter.ttkに用意されているNotebookウィジェットは、複数のウィンドウ(ウィジェット)をタブによって表示切り替えを可能にしてくれます。
タブの一つをクリックすると、その選択したタブに紐づいているウィンドウ(ウィジェット)を表示します。
このNotebookウィジェットを使用することで、様々な機能を各ウィンドウに整理して表示することができます。
多機能なGUIアプリを作成する上では必須なウィジェットです。
Notebookウィジェットの使い方
tkinter.ttkのインポートとメインウィンドウの作成
tkinter.ttkはPythonに標準で含まれています。
そのためpipでインストールすることは必要ないです。
ただプログラムの先頭でtkinter.ttkをインポートすることが必要になります。
from tkinter import ttk
次にGUIアプリケーションのメインウィンドウとなるrootを作成します。
# tkinterのインポート
import tkinter as tk
import tkinter.ttk as ttk
# rootメインウィンドウの設定
root = tk.Tk()
root.title("Notebook Widget")
root.geometry("300x100")
ここまでがGUIアプリケーションを作成する上で共通する流れです。
次にrootメインウィンドウにタブを設置していきたいと思います。
タブを作成・配置する流れ
Notebookウィジェットを用いてGUIアプリケーションにタブを作成・設置するには、以下の流れでプログラムを作成します。
- Notebookウィジェットを作成
- タブの作成
- タブをNotebookウィジェットに追加
- Notebookウィジェットを配置
- 各タブにウィジェットを作成・配置
Notebookウィジェットを作成
Notebookウィジェットを作成するには、以下のように記述します。
notebook = ttk.Notebook(container, option)
第一引数containerには、親ウィジェットを指定します。
大抵はrootメインウィンドウを指定します。
第二引数optionには、以下に示すオプションを指定することができます。
オプション名 | 意味 |
---|---|
height | 高さの指定 |
width | 横幅の指定 |
cursor | マウスホバー時のカーソルの指定 |
padding | 内部間隔を指定 |
タブの作成
タブを作成するために、タブに表示するウィジェットを以下のように作ります。
tab = tk.Frame(notebook)
第一引数に指定する親ウィジェットには、Notebookウィジェットを指定します。
タブのウィジェットには、Frameウィジェットが使われることが多いです。
もちろんFrame以外にもCanvasやLavelもタブに紐づけることができます。
タブをNotebookウィジェットに追加
ttk.Notebookが提供するadd()メソッドを使って、タブをNotebookウィジェットに追加します。
notebook.add(tab, option)
Notebookウィジェットに対してaddメソッドを使用します。
第一引数に子ウィジェットとなるタブを指定し、それ以降にはオプションを指定します。
add()メソッドには、以下に示すオプションが存在します。
オプション | 意味 |
---|---|
text | タブ上に表示するテキストの指定 |
image | タブ上に表示する画像の指定 |
compound | テキストと画像の両方を表示する場合の画像の位置 |
underline | 指定した位置の文字にアンダーラインを引く |
sticky | タブ内の子ウィジェットの位置を指定(n, s, w, e) |
state | タブの状態を指定。disabled:選択不可。hidden:表示しない |
compoundで画像の位置を指定は、tk.TOP、tk.BOTTOM、tk.LEFT、tk.RIGHT 、tk.CENTERとする。
例えばtk.LEFTとすると、画像が左、テキストが右に位置する。
Notebookウィジェットを配置
packやgridなどを使ってNotebookウィジェットを配置します。
notebook.pack()
各タブにウィジェットを作成・配置
あとは好きなように作成したタブ(Frameウィジェット)にLabelやButtonなどのウィジェットを作成・配置して完成となります。
サンプル
上記で説明した「タブを作成・配置する流れ」を元に、簡単なアプリを以下に示します。
# tkinterのインポート
import tkinter as tk
import tkinter.ttk as ttk
# rootメインウィンドウの設定
root = tk.Tk()
root.title("Notebook Widget")
root.geometry("300x100")
# Notebookウィジェットの作成
notebook = ttk.Notebook(root)
# タブの作成
tab_one = tk.Frame(notebook, bg='white')
tab_two = tk.Frame(notebook, bg='blue')
# notebookにタブを追加
notebook.add(tab_one, text="tab1", underline=0)
notebook.add(tab_two, text="tab2")
# tab_oneに配置するウィジェットの作成
label = ttk.Label(tab_one, text="Notebook ウィジェットの作成", background='white')
# ウィジェットの配置
notebook.pack(expand=True, fill='both', padx=10, pady=10)
label.pack()
root.mainloop()
上記ソースコードを起動すると、次のようなGUIアプリケーションが起動します。
Notebookウィジェットのメソッド
Notebookウィジェットには、add()メソッド以外にも有用なメソッドがいくつか用意されています。
forget()メソッド
forget()メソッドは、Notebookウィジェットからタブを取り除くメソッドです。
引数にタブを指定することで、指定したタブをNotebookウィジェットから取り除きます。
notebook.forget(tab)
hide()メソッド
hide()メソッドは、forget()メソッドのようにNotebookウィジェットからタブを取り除くメソッドです。引数にはtabIdを指定します。
forget()メソッドとの違いとしては、hide()メソッドは一時的に取り除くという点です。
再度タブを表示するには、add()メソッドを使用します。
まとめ
本記事「【Python tkinter】複数のタブを実装したGUIアプリの作成(Notebookウィジェット)」はいかがでしたか。
様々な機能を実装したGUIアプリを作成する場合は、本記事で紹介した方法でタブを追加して、ユーザーに使いやすいアプリ作成をしてみてください。