前回、文字列を表示するだけのGUIアプリケーションを作ってみました。今回はラベル以外にボタンや入力欄などを配置してみましょう。
※ 2022/10/17 解説コードのウィジェットについて当初ttkを使用していましたがデフォルトに変更しました。ttkについてはこちらで解説しています。
Contents
ウィジェットとは
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はチェックボタン、チェックボックスなどと呼ばれ、チェック入力のためのウィジェットです。押下するとチェック/チェック解除ができます。
from tkinter import Tk, Checkbutton # メインウィンドウ生成 root = Tk() # メインウィンドウの設定 root.title("サンプル") # Checkbuttonウィジェットをメインウィンドウに生成&配置 check_button = Checkbutton(root, text="Check me.") check_button.pack() # イベントループの開始 root.mainloop()
以下のようなチェック入力欄が表示されます。
これもその名の通りラジオボタンのウィジェットです。
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()
以下のように表示されます。
本講座ではこの後の記事でボタン、エントリーのみ詳細な説明を行います。それらが理解できれば他のものも公式資料ですんなり理解できると思いますので他のものの説明は割愛する予定です。