前回、文字列を表示するだけのGUIアプリケーションを作ってみました。今回はラベル以外にボタンや入力欄などを配置してみましょう。
Contents
ウィジェットとは
Tkでは「ウィジェット」でと呼ばれる要素で画面に表示されるものが構成されます。例えば、前回HelloWorldを表示したラベルや、ボタン、入力欄、チェックボックス、ラジオボタン等がウィジェットの例として挙げられます。GUIツールキットによってはコントロールと呼ばれることもあります。
ウィジェットの配置
Tkで画面に何かを表示するという操作はウィジェットを配置することと同義になります。前回作成したコードをもう一度見てみましょう。
from tkinter import Tk from tkinter.ttk import Label # メインウィンドウ生成 root = Tk() # メインウィンドウの設定 root.title("サンプル") # Labelウィジェットをメインウィンドウに配置 label = Label(root, text="Hello world") label.pack() # イベントループの開始 root.mainloop()
Tk()でウィンドウを生成することができます。このウィンドウにはタイトルや最小化、閉じるボタン、マウスでのドラッグアンドドロップができたり等の基本的な機能が予め用意されています。
上のコードではこのウィンドウの上に11行目でLabelと呼ばれる文字列を表示するウィジェットを生成しています。また、通常、ウィジェットには配置のためのメソッドがいくつか用意されており、12行目で実行しているpack()はそのうちの1つです。
基本的にはTk()でウィンドウを作成し、ウィジェットを生成する際にどのウィンドウに配置するかを指定、生成、pack等の配置メソッドを呼び出し、最後にイベントループを開始する、というフローになります。(イベントループについては次回説明します。)
基本的なウィジェット
ウィジェットには様々な種類があるのですが、ここでは基本的な以下のものについて紹介します。
- Label
- Frame
- Button
- Checkbutton
- Radiobutton
- Entry
- Combobox
今回は各ウィジェットの紹介に留め、細かい説明は次回のイベントの説明の後に行います。まずはそれぞれのウィジェットがどういったものなのか、というのを簡単に知っておいてください。
Label
Labelとは先程説明したようにその名の通りラベルで文字列を表示するウィジェットです。生成する際に引数に表示する文字列を指定します。
Frame
Frameとは画面上の枠を表すウィジェットです。
from tkinter import Tk from tkinter.ttk import Label, Frame # メインウィンドウ生成 root = Tk() # メインウィンドウの設定 root.title("サンプル") # Frameウィジェットをメインウィンドウに配置 frame = Frame(root) frame['padding'] = (10, 10, 10, 10) frame['borderwidth'] = 2 frame['relief'] = 'sunken' frame.pack() # Labelウィジェットをframe上に配置 label = Label(frame, text="Hello world") label.pack() # イベントループの開始 root.mainloop()
以下のようにlabelが窪んだ枠に囲まれます。

Button
Buttonはその名の通りボタンのウィジェットで押下すると何らかの処理を呼び出すことができます。引数textでボタンに表示する文字列を指定することができます。
from tkinter import Tk from tkinter.ttk import Button # メインウィンドウ生成 root = Tk() # メインウィンドウの設定 root.title("サンプル") # Buttonウィジェットをメインウィンドウに生成&配置 button = Button(root, text="sample button") button.pack() # イベントループの開始 root.mainloop()
以下のようにボタンが表示されます。

Checkbuttonはチェックボタン、チェックボックスなどと呼ばれ、チェック入力のためのウィジェットです。押下するとチェック/チェック解除ができます。
from tkinter import Tk from tkinter.ttk import Checkbutton # メインウィンドウ生成 root = Tk() # メインウィンドウの設定 root.title("サンプル") # Checkbuttonウィジェットをメインウィンドウに生成&配置 check_button = Checkbutton(root, text="Check me.") check_button.pack() # イベントループの開始 root.mainloop()
以下のようなチェック入力欄が表示されます。

これもその名の通りラジオボタンのウィジェットです。
from tkinter import Tk, IntVar from tkinter.ttk import Radiobutton # メインウィンドウ生成 root = Tk() # メインウィンドウの設定 root.title("サンプル") # Radiobuttonウィジェットをメインウィンドウに生成&配置 variable = IntVar() radio_button1 = Radiobutton(root, text="option 1", variable=variable, value=1) radio_button2 = Radiobutton(root, text="option 2", variable=variable, value=2) radio_button3 = Radiobutton(root, text="option 3", variable=variable, value=3) radio_button1.pack() radio_button2.pack() radio_button3.pack() # イベントループの開始 root.mainloop()
以下のようにラジオボタンが表示されます。

Entry
Entryは入力欄を表すウィジェットです。
from tkinter import Tk from tkinter.ttk import Entry # メインウィンドウ生成 root = Tk() # メインウィンドウの設定 root.title("サンプル") # Entryウィジェットをメインウィンドウに生成&配置 entry = Entry(root) entry.pack() # イベントループの開始 root.mainloop()
以下のように入力欄が表示され、文字を入力することが可能です。

Combobox
Comboboxはコンボボックスやセレクトボックスと呼ばれる、複数の選択肢の中から値を選ぶことができるウィジェットです。
from tkinter import Tk from tkinter.ttk import Combobox # メインウィンドウ生成 root = Tk() # メインウィンドウの設定 root.title("サンプル") # Comboboxウィジェットをメインウィンドウに生成&配置 values = ["One", "Two", "Three"] combobox = Combobox(root, values=values) combobox.pack() # イベントループの開始 root.mainloop()
以下のようにコンボボックスが表示されます。
