Tkinterの使い方

作成日:2018-12-08
Python

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 引数

引数の一部です。

Tk.NWのようにすれば右上に配置されます。英語の方角に対応しています。 Tk.N + Tk.Sのように足し算すると、上下に引き伸ばされます。 CENTER以外を足すと、全体的に引き伸ばされます。

grid とは

生成したラベルやボタンなどを表示させるためには、いくつか方法があります。 その一つがgridです。 gridは行と列を指定して配置する方法です。 ほかの方法はpackplaceになります。

grid 引数

引数の一部です。

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 の引数

引数の一部です。

Entry のメソッド

メソッドの一部です。

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 の引数

引数の一部です。

Text のメソッド

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 の引数

引数の一部です。

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 だとチェックが入ります。 つまり、チェックボタンを実装するためには、BooleanVarCheckbutton の2つの関数を呼び出す必要があります。

これは僕の環境だからダメなのかわからないのですが、checkButton だけを True にしても最初からチェックされた状態で表示されませんでした。 なぜか、ボタンと関連付けるようにプログラムを書くと、最初からチェックが入るようになります。 バグのような気もするのですが……。

Checkbutton の引数

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)