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)