ウィジェット

前回、文字列を表示するだけのGUIアプリケーションを作ってみました。今回はラベル以外にボタンや入力欄などを配置してみましょう。

ウィジェットとは

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

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()

以下のようなチェック入力欄が表示されます。

Radiobutton

これもその名の通りラジオボタンのウィジェットです。

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()

以下のようにコンボボックスが表示されます。