Python 入門

ホーム > Tkinter による GUI プログラミング > Tkinter 使ってみよう

Tkinter 使ってみよう

tkinter は Tk を Python から利用するためのパッケージです。

Python の GUI ツールキットとして現状デファクトスタンダードです。

Raspberry Pi などで GUI を利用したい場合にも tkinter がよく利用されます。

インストール方法及びインストールの確認方法については「 Tkinter のインストール」をみてください。

ここでは tkinter を用いて簡単なプログラムを作成してみましょう。

尚、ここでは Python3.5 を利用しています。

ここで作成するプログラム

ここで作成するプログラムは次の通りです。

小さなポップアップウィンドウに、名前の入力を促すラベル、入力ボックス、そして OK ボタンがあります。

名前を入力してボタンをクリックすると、コンソールに "Hello, <名前>!" と表示されます。

UI コンポーネント (「ウィジェット (Widget)」と言います) の作成と配置方法、 クリックしたときのイベントハンドラの設定に主に着目してみてみましょう。

全体のコードは次の通りです。

from tkinter import *
from tkinter import ttk

def foo():
    print('Hello, %s!' % t.get())

root = Tk()
root.title('My First App')
frame1 = ttk.Frame(root)
label1 = ttk.Label(frame1, text='Your name:')

t = StringVar()

entry1 = ttk.Entry(frame1, textvariable=t) 
button1 = ttk.Button(frame1, text='OK', command=foo)

frame1.grid(row=0,column=0,sticky=(N,E,S,W))
label1.grid(row=1,column=1,sticky=E)
entry1.grid(row=1,column=2,sticky=W)
button1.grid(row=2,column=2,sticky=W)

for child in frame1.winfo_children():
    child.grid_configure(padx=5, pady=5)

root.mainloop()

tkinter ではウィジェットは階層構造を構成するように作成します。

Tk() でルート要素を作成したら、FrameLabelButton それぞれの作成時に、それぞれの親となるウィジェットを渡しています。 Frame はウィジェットのコンテナになっています。

grid() は、ジオメトリ・マネージャ (geometory manager) に対して指示を出しています。 他の言語でもよくレイアウトマネージャとかそんな名前で、 UI 要素のレイアウトを指示したことがあるかもしれませんね。

ここでは「グリッド・ジオメトリ・マネージャ」で、グリッド状 (格子状) のレイアウトを考え、その行 (row) と列 (column) の番号を割り当てることによって、ウィジェットを配置しています。

ボタンを押したときのイベント処理は、ボタンの command 属性に 関数オブジェクト を割り当てます。ここでは foo という名前の関数をあらかじめ定義しておき、それを渡しています。

入力した文字列を取得する方法はかなり便利な方法です。まず、 StringVar() でグローバル変数を作成します。 それを入力ボックスを表すウィジェットである Entry の textvariable 属性に割り当てています。

これによって、入力した文字が自動的に変数にセットされます。

ここでは t という変数に自動的に入力値がセットされるので、それを print でフォーマットした上でコンソールに出力しています。

ホーム > Tkinter による GUI プログラミング > Tkinter 使ってみよう