ウィジェット

前回、文字列を表示するだけのGUIアプリケーションを作ってみました。今回はラベル以外にボタンや入力欄などを配置してみましょう。
※ 2022/10/17 解説コードのウィジェットについて当初ttkを使用していましたがデフォルトに変更しました。ttkについてはこちらで解説しています。

ウィジェットとは

Tkでは「ウィジェット」でと呼ばれる要素で画面に表示されるものが構成されます。例えば、前回HelloWorldを表示したラベルや、ボタン、入力欄、チェックボックス、ラジオボタン等がウィジェットの例として挙げられます。GUIツールキットによってはコントロールと呼ばれることもあります。

また、メインウィンドウもウィジェットの一種で、Tkのdocstringには「Toplevel widget of Tk」と説明されています。

メインウィンドウとウィジェットの配置

Tkで画面に何かを表示するということはウィジェットを配置することとほぼ同義になります。前回作成したコードをもう一度見てみましょう。

from tkinter import Tk, 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
  • OptionMenu

今回は各ウィジェットの紹介に留めます。まずはそれぞれのウィジェットがどういったものなのか、というのを簡単に知っておいてください。

Label

Labelとは先程説明したようにその名の通りラベルで文字列を表示するウィジェットです。生成する際に引数に表示する文字列を指定します。

Frame

Frameとは画面上の枠を表すウィジェットです。

from tkinter import Tk, Label, Frame

# メインウィンドウ生成
root = Tk()

# メインウィンドウの設定
root.title("サンプル")
root.geometry('100x100')

# Frameウィジェットをメインウィンドウに配置
frame = Frame(root, width=50, height=50,  bg="#000000")
frame['borderwidth'] = 1
frame.pack()

# Labelウィジェットをframe上に配置
label = Label(frame, text="Hello world")
label.pack()

# イベントループの開始
root.mainloop()

以下のようにlabelが枠に囲まれました。ラベルや後述するボタン、エントリーなどをグルーピング化する際に使用します。

Button

Buttonはその名の通りボタンのウィジェットで押下すると何らかの処理を呼び出すことができます。引数textでボタンに表示する文字列を指定することができます。

from tkinter import Tk, Button

# メインウィンドウ生成
root = Tk()

# メインウィンドウの設定
root.title("サンプル")

# Buttonウィジェットをメインウィンドウに生成&配置
button = Button(root, text="sample button")
button.pack()

# イベントループの開始
root.mainloop()

以下のようにボタンが表示されます。

Checkbutton

Checkbuttonはチェックボタン、チェックボックスなどと呼ばれ、チェック入力のためのウィジェットです。押下するとチェック/チェック解除ができます。

from tkinter import Tk, Checkbutton

# メインウィンドウ生成
root = Tk()

# メインウィンドウの設定
root.title("サンプル")

# Checkbuttonウィジェットをメインウィンドウに生成&配置
check_button = Checkbutton(root, text="Check me.")
check_button.pack()

# イベントループの開始
root.mainloop()

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

Radiobutton

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

from tkinter import Tk, IntVar, 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, Entry

# メインウィンドウ生成
root = Tk()

# メインウィンドウの設定
root.title("サンプル")

# Entryウィジェットをメインウィンドウに生成&配置
entry = Entry(root)
entry.pack()

# イベントループの開始
root.mainloop()

以下のように入力欄が表示され、文字を入力することが可能です。

OptionMenu

OptionMenuはドロップダウンメニュー、コンボボックス、セレクトボックス等と呼ばれる、複数の選択肢の中から値を選ぶことができるウィジェットです。

from tkinter import Tk, Combobox

# メインウィンドウ生成
root = Tk()

# メインウィンドウの設定
root.title("サンプル")

# Comboboxウィジェットをメインウィンドウに生成&配置
values = ["One", "Two", "Three"]
combobox = Combobox(root, values=values)
combobox.pack()

# イベントループの開始
root.mainloop()

以下のように表示されます。

 

本講座ではこの後の記事でボタン、エントリーのみ詳細な説明を行います。それらが理解できれば他のものも公式資料ですんなり理解できると思いますので他のものの説明は割愛する予定です。