Python Tkinter¶
はじめに¶
Tkinter¶
Python標準GUIライブラリです。
https://docs.python.org/ja/3/library/tkinter.html
Tcl/Tk(スクリプト言語TclとGUIライブラリのTk)をラップしたGUIライブラリです。
基本的なウィジェットと3種類のジオメトリマネージャがあります。
同じウィジェットについて、初期からのものと、ttk(テーマ付きウィジェット)の2種類があります。(一部のウィジェットはどちらかのみ)
最初の一歩¶
最低限のウィンドウ表示¶
import tkinter as tk
root = tk.Tk()
root.mainloop()
- Tkinterライブラリをimportします。慣習的に、別名 tk を適用します。
- Tk()でトップレベルウィンドウを生成します。
- mainloopメソッドを呼ぶと、GUIイベントループに入りGUIのイベント処理が開始されます。
サイズ指定¶
root = tk.Tk()
root.geometry("640x400")
- ウィンドウの幅と高さを指定します。
画面上の表示位置を指定する場合は、root.geometry("640x400+640+192")
のように、幅 x 高さ + 表示位置(横)+ 表示位置(縦)と指定します。
ウィジェットの配置¶
ラベルとボタンの2つのウィジェットを並べます。
ウィジェットの配置は、3種類あるジオメトリマネージャのうちPackerを使います。
import tkinter as tk
root = tk.Tk()
root.geometry('192x96')
label = tk.Label(root, text='Hello, world')
label.pack()
button = tk.Button(root, text='ご挨拶', command=lambda: label.configure(text='Welcome to Python/Tkinter'))
button.pack()
root.mainloop()
実行直後 | ボタン押下後 |
---|---|
![]() |
![]() |
- トップレベルウィンドウを大きさ192x96で生成
- ラベルにテキスト「Hello, world」を設定し、トップレベルウィンドウの子ウィジェットとして生成
- ボタンにテキスト「ご挨拶」を設定し、ボタン押下時にラベルのテキストを「Welcome to Python/Tkinter」に変更するイベント処理を設定し、トップレベルウィンドウの子ウィジェットとして生成
- 1つ目のウィジェットとしてラベルをpackメソッドで配置
- 2つ目のウィジェットとしてボタンをpackメソッドで配置
packメソッドは、デフォルトでside=TOPとなるので、ウィジェットを上から下へ配置
次の一歩¶
クラスで定義¶
最初の一歩で作った スクリプト をクラスで記述します。
import tkinter as tk
class App(tk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack()
self.label = tk.Label(self, text='Hello, world')
self.label.pack()
self.button = tk.Button(self, text='ご挨拶', command=lambda: self.label.configure(text='Welcome to Python/Tkinter'))
self.button.pack()
def main():
root = tk.Tk()
root.geometry('192x96')
app = App(root)
app.mainloop()
if __name__ == '__main__':
main()
ジオメトリマネージャ¶
Packer¶
Packerは、packメソッドを呼んだ際に指定されたsideからウィジェットを詰めていきます。sideの指定は、TOP, LEFT, RIGHT, BOTTOMのいずれかです。
packメソッドで指定するオプション¶
オプション | 選択肢 | 内容 |
---|---|---|
side | TOP , BOTTOM, LEFT, RIGHT | 親ウィジェットに詰めるときの並び方向 |
expand | 0, 1 | 親ウィジェットに詰めたときに、余白があればこのウィジェットを余白いっぱいに広げるか否か |
anchor | N, NE, E, SE, S, SW, W, NW, CENTOR | ウィジェットの配置領域の中でどの箇所にウィジェットを寄せるかを指定 |
fill | NONE , X, Y, BOTH | ウィジェットの配置領域の指定方向一杯にウィジェットを広げる |
padx pady | 数値(ピクセル) | ウィジェットの外側に空白を設ける |
ipadx ipady | 数値(ピクセル) | ウィジェットの内側の境界に空白を設ける |
1 下線はデフォルトを示す
ウィジェット¶
ttkウィジェット¶
見た目を Style で定義するウィジェットです。クロスプラットフォームで共通性を高める効果があるようです。オリジナルのウィジェットと見た目の定義方法が変わります。