今日はtkinter(ティーキンター、ティーケーインター)を使ってみます。
tkinterは、pythonで標準的に使えるGUI(グラフィカルユーザインタフェース)です。
GUIという言葉までは説明しなくていいかもしれないけど、ウィンドウとかボタンとかを画面に出して操作できるようにするプログラムですね。
pythonでこれまで作ってきたプログラムは、画面に文字を表示したり、グラフを表示したりでした。tkinterによって、ウィンドウを持つプログラムを作ることが出来ます。
ウィンドウを出すだけのプログラム
# -*- coding: utf-8 -*-
# thinterを読み込みんでtkという名前で使う準備をします。
import tkinter as tk
# ウィンドウを生成してそのウィンドウを操作するための値をrootに代入します。
root = tk.Tk()
# ウィンドウを表示して制御するためのループに入ります。
root.mainloop()
これでウィンドウが出ましたね。(まだおもしろいプログラムではないけど)
最終行の「root.mainloop()」を実行するとpython側がプログラムの制御を始めてくれます。
プログラムを終了するためには、表示されたウィンドウの×ボタンを押します。
ポイント
(1)「root = tk.Tk()」でウィンドウを操作するための値を得ます。
(2)ここでウィンドウの処理を定義します。
(3)「root.mainloop()」を呼び出してウィンドウの表示と制御を開始します。
ウィンドウ名とウィンドウサイズの指定
以下のプログラムでウィンドウ名の表示と、ウィンドウサイズを指定することが出来ます。
# -*- coding: utf-8 -*-
# thinterを読み込みんでtkという名前で使う準備をします。
import tkinter as tk
# ウィンドウを生成してそのウィンドウを操作するための値をrootに代入します。
root = tk.Tk()
# ウィンドウ名を指定します
root.title('tkinter window')
# ウィンドウサイズを指定します。('x'は、小文字のエックスです。)
root.geometry('320x240')
# ウィンドウを表示して制御するためのループに入ります。
root.mainloop()
ウィンドウ名とウィンドウサイズの指定ができました。
ウィンドウの位置も以下のように指定可能です。
root.geometry('320x240+50+100')
横幅320ピクセル、高さ240ピクセルのウィンドウを表示します。
画面の左上を0,0として、X座標50ピクセル、Y座標100ピクセルの位置にウィンドウが表示されます。
ボタンの表示と押されたときの処理の定義
以下のプログラムは、ボタン(A,B,C,D,E,F)の表示を行い、それぞれのボタンが押されたら、ウィンドウ内のテキストボックスに、どのボタンが押されたかをテキストで表示するものです。
ボタンの定義では、ボタンに表示する文字と、押された時に呼び出す関数名と、サイズを指定しています。ボタンの並びの定義では、3個ずつ2段に表示されるように調整しています。
# -*- coding: utf-8 -*-
# thinterを読み込みんでtkという名前で使う準備をします。
import tkinter as tk
# ボタンが押されたときの処理
def procA():
# txtの削除 0番目~最後(tk.END)まで
txt.delete(0,tk.END)
# txt追加(末尾(tk.END)の後ろに
txt.insert(tk.END,"Aボタンが押されました")
def procB():
# txtの削除 0番目~最後(tk.END)まで
txt.delete(0,tk.END)
# txt追加(末尾(tk.END)の後ろに
txt.insert(tk.END,"Bボタンが押されました")
def procC():
# txtの削除 0番目~最後(tk.END)まで
txt.delete(0,tk.END)
# txt追加(末尾(tk.END)の後ろに
txt.insert(tk.END,"Cボタンが押されました")
def procD():
# txtの削除 0番目~最後(tk.END)まで
txt.delete(0,tk.END)
# txt追加(末尾(tk.END)の後ろに
txt.insert(tk.END,"Dボタンが押されました")
def procE():
# txtの削除 0番目~最後(tk.END)まで
txt.delete(0,tk.END)
# txt追加(末尾(tk.END)の後ろに
txt.insert(tk.END,"Eボタンが押されました")
def procF():
# txtの削除 0番目~最後(tk.END)まで
txt.delete(0,tk.END)
# txt追加(末尾(tk.END)の後ろに
txt.insert(tk.END,"Fボタンが押されました")
# ウィンドウを生成してそのウィンドウを操作するための値をrootに代入します。
root = tk.Tk()
# ウィンドウ名を指定します
root.title('tkinter window')
# ウィンドウサイズを指定します。('x'は、小文字のエックスです。)
root.geometry('320x240')
#テキストボックスの定義(幅50、表示位置5,200)
txt = tk.Entry(width=50)
txt.place(x=5, y=200)
#ボタンの定義
ButtonA = tk.Button(root,text="A", command=procA, width=6, height=3)
ButtonB = tk.Button(root,text="B", command=procB, width=6, height=3)
ButtonC = tk.Button(root,text="C", command=procC, width=6, height=3)
ButtonD = tk.Button(root,text="D", command=procD, width=6, height=3)
ButtonE = tk.Button(root,text="E", command=procE, width=6, height=3)
ButtonF = tk.Button(root,text="F", command=procF, width=6, height=3)
#ボタンの並びを定義
ButtonA.grid(row=0, column=0)
ButtonB.grid(row=0, column=1)
ButtonC.grid(row=0, column=2)
ButtonD.grid(row=1, column=0)
ButtonE.grid(row=1, column=1)
ButtonF.grid(row=1, column=2)
# ウィンドウを表示して制御するためのループに入ります。
root.mainloop()
実行すると、以下のウィンドウが表示されます。
ボタンを押すと、テキストボックスにどのボタンが押されたかが表示されます。
まとめ
tkinterを使用して、ウィンドウを表示してボタンを張り付け、それぞれのボタンが押されたときの処理を記載してみました。
まだまだ役に立つプログラムではありませんが、ウィンドウやボタンを表示するとプログラムを作っている感じがしてきますね。