プロジェクト

全般

プロフィール

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()
実行直後 ボタン押下後
Hello world実行直後の画面 Hello worldボタン押下後の画面
  • トップレベルウィンドウを大きさ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 で定義するウィジェットです。クロスプラットフォームで共通性を高める効果があるようです。オリジナルのウィジェットと見た目の定義方法が変わります。


1年以上前に更新