Tkinterの使い方
Tkinterを利用したGUIアプリケーションの作成方法をまとめる。
import
import tkinter as tk
最低限の実装
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.master.title('title name')
self.master.geometry('500x500')
if __name__=='__main__':
f = Application()
f.pack()
f.mainloop()
タイトルバーと画面サイズの実装です。
Label の実装
文字を表示する関数です。
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.master.title('title name')
self.master.geometry('500x500')
# ラベルの実装
label = tk.Label(self, text='label name')
label.grid(row=0, column=0)
if __name__=='__main__':
f = Application()
f.pack()
f.mainloop()
ラベルを実装するためにはLabel関数を使います。
ラベルを表示するにはgrid関数を使います。
label 引数
引数の一部です。
text: 実際に表示される文字sticky: 配置に余裕があれば、引き伸ばされます。Tk.CENTER: 中央Tk.N: 上Tk.S: 下Tk.W: 右Tk.E: 左
Tk.NWのようにすれば右上に配置されます。英語の方角に対応しています。
Tk.N + Tk.Sのように足し算すると、上下に引き伸ばされます。
CENTER以外を足すと、全体的に引き伸ばされます。
grid とは
生成したラベルやボタンなどを表示させるためには、いくつか方法があります。
その一つがgridです。
gridは行と列を指定して配置する方法です。
ほかの方法はpack、placeになります。
grid 引数
引数の一部です。
row: 行指定rowspan: 複数行に配置するときに使いますcolumn: 列指定columnspan: 複数列に配置するときに使います
Entry の実装
1行だけのテキストボックスを実装するときに使います。
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.master.title('title name')
self.master.geometry('500x500')
# entry の実装
entry = tk.Entry(self, width=10)
entry.grid(row=0, column=0)
if __name__=='__main__':
f = Application()
f.pack()
f.mainloop()
Entry の引数
引数の一部です。
width: 幅を設定します
Entry のメソッド
メソッドの一部です。
get(): 入力された文字列を取得しますdelete(first, last): 引数で与えられた分を含んで消去します。文字列の先頭を0として指定します。文字列の最後を指定する方法は、endという文字列を渡します。最後からx番目の文字と指定したい場合は、end-xcとします。たとえば、すべて消去したいときは、('0', 'end')と書きます。
Text の実装
複数行にわたってテキストボックスを実装するときに使います。
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.master.title('title name')
self.master.geometry('500x500')
# text の実装
text = tk.Text(self, width=10)
text.grid(row=0, column=0)
if __name__=='__main__':
f = Application()
f.pack()
f.mainloop()
Text の引数
引数の一部です。
width: 幅を設定しますheight: 行数を設定します
Text のメソッド
get(first, last): 引数で与えられた分を含んで取得します。文字列の先頭を0として指定します。文字列の最後を指定する方法は、endという文字列を渡します。最後からx番目の文字と指定したい場合は、end-xcとします。たとえば、すべて取得したいけど、最後の改行コードはいらないときは、('0', 'end-1c')と書きます。delete(first, last): 引数で与えられた分を含んで消去します。文字列の先頭を0として指定します。文字列の最後を指定する方法は、endという文字列を渡します。最後からx番目の文字と指定したい場合は、end-xcとします。たとえば、すべて消去したいときは、('0', 'end')と書きます。
Button の実装
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.master.title('title name')
self.master.geometry('500x500')
# ボタンの実装
button = tk.Button(self, text='button')
button.grid(row=0, column=0)
if __name__=='__main__':
f = Application()
f.pack()
f.mainloop()
Button の引数
引数の一部です。
text: 実際に表示される文字command: クリックしたときの動作設定します。関数を指定する場合は()を消す必要があります。
Checkbutton の実装
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.master.title('title name')
self.master.geometry('500x500')
self.wiget()
def wiget(self):
# チェックボタンの True, False の設定
bln = tk.BooleanVar()
bln.set(True)
# チェックボタンの実装
checkButton = tk.Checkbutton(self, variable=bln, text='check Button')
checkButton.grid(row=0, column=0)
# オマケ
def boo():
# こうやって BooleanVar を使わないと最初からチェックがつかない?(環境:python=3.7.0)
if bln.get():
print('boo')
button = tk.Button(self, text='oo', command=boo)
button.grid(row=1, column=0)
if __name__=='__main__':
f = Application()
f.pack()
f.mainloop()
チェックボタンを判定するには Boolean 形式の入る関数であるBooleanVarを使います。これが True だとチェックが入ります。
つまり、チェックボタンを実装するためには、BooleanVar と Checkbutton の2つの関数を呼び出す必要があります。
これは僕の環境だからダメなのかわからないのですが、checkButton だけを True にしても最初からチェックされた状態で表示されませんでした。 なぜか、ボタンと関連付けるようにプログラムを書くと、最初からチェックが入るようになります。 バグのような気もするのですが……。
Checkbutton の引数
text: 実際に表示される文字variable: チェックされているかどうかを判定します。BooleanVarオブジェクトを渡します。
BooleanVar のメソッド
set(): True か False しか受け付けませんget(): 呼び出されたときのBooleanVarオブジェクトの値を返します。
参考ホームページ
公式ドキュメント (http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/index.html)
紫藤のページ-On Python (http://www.shido.info/py/index.html)
How to get the input from the Tkinter Text Box Widget? (https://stackoverflow.com/questions/14824163/how-to-get-the-input-from-the-tkinter-text-box-widget)
PythonのTkinterを使ってみる (https://qiita.com/nnahito/items/ad1428a30738b3d93762)