[Python Tkinter] ウィジェット一覧
PythonのTkinterライブラリは、GUIアプリケーションを作成するためのウィジェットを提供しています。
主なウィジェットには、Button
(ボタン)、Label
(ラベル)、Entry
(テキスト入力フィールド)、Text
(複数行テキスト入力)、Canvas
(描画領域)、Frame
(コンテナ)、Listbox
(リスト表示)、Scrollbar
(スクロールバー)、Menu
(メニュー)、Checkbutton
(チェックボックス)、Radiobutton
(ラジオボタン)、Scale
(スライダー)、Spinbox
(数値入力)、Message
(メッセージ表示)、Toplevel
(新しいウィンドウ)などがあります。
Tkinterとは
Tkinterの概要
Tkinterは、PythonでGUI(グラフィカルユーザーインターフェース)を作成するための標準ライブラリです。
Pythonに標準で組み込まれているため、追加のインストールなしで使用でき、簡単にウィンドウやボタン、テキスト入力フィールドなどのGUI要素を作成できます。
Tkinterは、Tcl/TkというGUIツールキットをPythonから利用できるようにしたもので、クロスプラットフォーム対応のため、Windows、macOS、Linuxなどで動作します。
Tkinterの特徴は以下の通りです。
- シンプルなAPI: Pythonの初心者でも簡単に扱える直感的なAPIを提供。
- クロスプラットフォーム: 同じコードで異なるOS上で動作。
- 豊富なウィジェット: ボタン、ラベル、テキストボックスなど、多くのGUI要素をサポート。
Tkinterのインストール方法
TkinterはPythonに標準で含まれているため、通常は追加のインストールは不要です。
しかし、環境によってはTkinterがインストールされていない場合があります。
その場合は、以下の手順でインストールできます。
Windowsの場合
Windowsでは、Pythonをインストールすると自動的にTkinterもインストールされます。
特別な手順は不要です。
macOSの場合
macOSでも、Pythonをインストールすると通常Tkinterが含まれていますが、もし含まれていない場合は、以下のコマンドでインストールできます。
brew install python-tk
Linuxの場合
Linuxでは、Tkinterがデフォルトでインストールされていないことがあります。
以下のコマンドでインストールできます。
sudo apt-get install python3-tk
Tkinterの基本的な使い方
Tkinterを使って簡単なウィンドウを作成する方法を見てみましょう。
以下は、Tkinterを使って Hello, World!
というラベルを表示する最も基本的なプログラムです。
import tkinter as tk
# メインウィンドウの作成
root = tk.Tk()
# ウィンドウのタイトルを設定
root.title("Hello Tkinter")
# ラベルウィジェットの作成
label = tk.Label(root, text="Hello, World!")
# ラベルをウィンドウに配置
label.pack()
# ウィンドウを表示
root.mainloop()
このコードでは、tk.Tk()
でメインウィンドウを作成し、tk.Label()
でラベルウィジェットを作成しています。

pack()メソッド
を使って、ラベルをウィンドウに配置し、mainloop()
でウィンドウを表示し続けます。
Tkinterのウィジェットとは
Tkinterのウィジェットとは、GUIアプリケーションで使用される個々の要素のことです。
ウィジェットには、ボタン、ラベル、テキストボックス、リストボックスなど、ユーザーとアプリケーションがやり取りするためのさまざまな要素が含まれます。
主なウィジェットの種類は以下の通りです。
ウィジェット名 | 説明 |
---|---|
Button | ボタンを作成し、クリックイベントを処理します。 |
Label | テキストや画像を表示します。 |
Entry | ユーザーが1行のテキストを入力できるフィールドです。 |
Text | 複数行のテキストを入力できるフィールドです。 |
Frame | 他のウィジェットをグループ化するためのコンテナです。 |
Canvas | 図形や画像を描画するための領域です。 |
Toplevel | 新しいウィンドウを作成します。 |
これらのウィジェットを組み合わせることで、複雑なGUIアプリケーションを作成することができます。
基本的なウィジェット
Tkinterには、さまざまなウィジェットが用意されており、これらを使ってGUIアプリケーションを構築できます。
ここでは、基本的なウィジェットについて説明します。
Button(ボタン)
Button
ウィジェットは、ユーザーがクリックできるボタンを作成します。
ボタンには、テキストや画像を表示でき、クリックイベントに対して関数を実行することができます。
import tkinter as tk
def on_button_click():
print("ボタンがクリックされました!")
root = tk.Tk()
root.title("Buttonウィジェットの例")
# ボタンの作成
button = tk.Button(root, text="クリックしてね", command=on_button_click)
button.pack()
root.mainloop()

解説
Button
ウィジェットは、command
引数に関数を指定することで、ボタンがクリックされたときにその関数が実行されます。
Label(ラベル)
Label
ウィジェットは、テキストや画像を表示するために使用されます。
ユーザーからの入力は受け付けませんが、情報を表示するために便利です。
import tkinter as tk
root = tk.Tk()
root.title("Labelウィジェットの例")
# ラベルの作成
label = tk.Label(root, text="これはラベルです")
label.pack()
root.mainloop()

解説
Label
ウィジェットは、単純なテキストや画像を表示するために使用されます。
text
引数で表示するテキストを指定します。
Entry(テキスト入力フィールド)
Entry
ウィジェットは、ユーザーが1行のテキストを入力できるフィールドを提供します。
フォームやログイン画面などでよく使用されます。
import tkinter as tk
def show_entry_content():
print("入力されたテキスト:", entry.get())
root = tk.Tk()
root.title("Entryウィジェットの例")
# テキスト入力フィールドの作成
entry = tk.Entry(root)
entry.pack()
# ボタンの作成
button = tk.Button(root, text="入力内容を表示", command=show_entry_content)
button.pack()
root.mainloop()

解説
Entry
ウィジェットは、get()メソッド
を使って入力されたテキストを取得できます。
pack()メソッド
でウィジェットをウィンドウに配置します。
Text(複数行テキスト入力)
Text
ウィジェットは、複数行のテキストを入力できるフィールドを提供します。
長文の入力や編集が必要な場合に使用されます。
import tkinter as tk
def show_text_content():
print("入力されたテキスト:\n", text.get("1.0", tk.END))
root = tk.Tk()
root.title("Textウィジェットの例")
# 複数行テキスト入力フィールドの作成
text = tk.Text(root, height=5, width=40)
text.pack()
# ボタンの作成
button = tk.Button(root, text="入力内容を表示", command=show_text_content)
button.pack()
root.mainloop()

解説
Text
ウィジェットは、get()メソッド
を使って指定した範囲のテキストを取得できます。
範囲は行番号と列番号で指定します(例: "1.0"
は1行目の最初の文字を指します)。
Frame(フレーム)
Frame
ウィジェットは、他のウィジェットをグループ化するためのコンテナです。
複数のウィジェットを整理して配置する際に使用されます。
import tkinter as tk
root = tk.Tk()
root.title("Frameウィジェットの例")
# フレームの作成
frame = tk.Frame(root, borderwidth=2, relief="sunken")
frame.pack(padx=10, pady=10)
# フレーム内にラベルとボタンを配置
label = tk.Label(frame, text="フレーム内のラベル")
label.pack()
button = tk.Button(frame, text="フレーム内のボタン")
button.pack()
root.mainloop()

解説
Frame
ウィジェットは、他のウィジェットをグループ化して整理するために使用されます。
borderwidth
やrelief
オプションでフレームの外観をカスタマイズできます。
Canvas(キャンバス)
Canvas
ウィジェットは、図形や画像を描画するための領域を提供します。
図形の描画やカスタムグラフィックを作成する際に使用されます。
import tkinter as tk
root = tk.Tk()
root.title("Canvasウィジェットの例")
# キャンバスの作成
canvas = tk.Canvas(root, width=200, height=200)
canvas.pack()
# 図形の描画
canvas.create_rectangle(50, 50, 150, 150, fill="blue")
canvas.create_oval(50, 50, 150, 150, fill="red")
root.mainloop()

解説
Canvas
ウィジェットは、create_rectangle()
やcreate_oval()
などのメソッドを使って図形を描画できます。
fill
オプションで図形の色を指定できます。
Toplevel(新しいウィンドウ)
Toplevel
ウィジェットは、新しいウィンドウを作成します。
メインウィンドウとは別に、サブウィンドウを表示したい場合に使用されます。
import tkinter as tk
def open_new_window():
new_window = tk.Toplevel(root)
new_window.title("新しいウィンドウ")
label = tk.Label(new_window, text="これは新しいウィンドウです")
label.pack()
root = tk.Tk()
root.title("Toplevelウィジェットの例")
# ボタンの作成
button = tk.Button(root, text="新しいウィンドウを開く", command=open_new_window)
button.pack()
root.mainloop()

解説
Toplevel
ウィジェットは、メインウィンドウとは別に新しいウィンドウを作成します。
Toplevel
ウィジェットは、独立したウィンドウとして動作しますが、メインウィンドウが閉じられると一緒に閉じられます。
入力関連のウィジェット
Tkinterには、ユーザーからの入力を受け取るためのさまざまなウィジェットが用意されています。
ここでは、チェックボックスやラジオボタン、スライダーなど、入力に関連するウィジェットについて説明します。
Checkbutton(チェックボックス)
Checkbutton
ウィジェットは、ユーザーが選択または解除できるチェックボックスを作成します。
複数の選択肢から複数を選択できる場合に使用されます。
import tkinter as tk
def show_selection():
print("チェックボックスの状態:", var.get())
root = tk.Tk()
root.title("Checkbuttonウィジェットの例")
# チェックボックスの状態を保持する変数
var = tk.IntVar()
# チェックボックスの作成
checkbutton = tk.Checkbutton(root, text="選択してください", variable=var, command=show_selection)
checkbutton.pack()
root.mainloop()

解説
Checkbutton
ウィジェットは、variable
引数にIntVar
などの変数を指定し、その変数を通じてチェックの状態を取得します。
command
引数で、チェックが変更されたときに実行される関数を指定できます。
Radiobutton(ラジオボタン)
Radiobutton
ウィジェットは、複数の選択肢から1つだけを選択できるボタンを作成します。
選択肢が排他的な場合に使用されます。
import tkinter as tk
def show_selection():
print("選択されたオプション:", var.get())
root = tk.Tk()
root.title("Radiobuttonウィジェットの例")
# ラジオボタンの状態を保持する変数
var = tk.StringVar(value="オプション1")
# ラジオボタンの作成
radiobutton1 = tk.Radiobutton(root, text="オプション1", variable=var, value="オプション1", command=show_selection)
radiobutton2 = tk.Radiobutton(root, text="オプション2", variable=var, value="オプション2", command=show_selection)
radiobutton1.pack()
radiobutton2.pack()
root.mainloop()

解説
Radiobutton
ウィジェットは、variable
引数にStringVar
などの変数を指定し、その変数を通じて選択されたオプションを取得します。
複数のラジオボタンが同じ変数を共有することで、排他的な選択が可能になります。
Scale(スライダー)
Scale
ウィジェットは、ユーザーがスライダーを使って数値を選択できるウィジェットです。
範囲内の数値を選択する場合に使用されます。
import tkinter as tk
def show_value(val):
print("選択された値:", val)
root = tk.Tk()
root.title("Scaleウィジェットの例")
# スライダーの作成
scale = tk.Scale(root, from_=0, to=100, orient="horizontal", command=show_value)
scale.pack()
root.mainloop()

解説
Scale
ウィジェットは、from_
とto
引数でスライダーの範囲を指定し、orient
引数でスライダーの方向(水平または垂直)を指定します。
command
引数で、スライダーの値が変更されたときに実行される関数を指定できます。
Spinbox(数値入力)
Spinbox
ウィジェットは、ユーザーが数値を入力するためのウィジェットで、上下の矢印を使って数値を増減できます。
数値の範囲を指定して入力を制限する場合に便利です。
import tkinter as tk
def show_value():
print("選択された値:", spinbox.get())
root = tk.Tk()
root.title("Spinboxウィジェットの例")
# スピンボックスの作成
spinbox = tk.Spinbox(root, from_=0, to=10)
spinbox.pack()
# ボタンの作成
button = tk.Button(root, text="値を表示", command=show_value)
button.pack()
root.mainloop()

解説
Spinbox
ウィジェットは、from_
とto
引数で入力可能な数値の範囲を指定します。
get()メソッド
を使って、現在選択されている値を取得できます。
Listbox(リストボックス)
Listbox
ウィジェットは、複数の項目をリスト形式で表示し、ユーザーがその中から1つまたは複数の項目を選択できるウィジェットです。
import tkinter as tk
def show_selection():
selected_indices = listbox.curselection()
selected_items = [listbox.get(i) for i in selected_indices]
print("選択された項目:", selected_items)
root = tk.Tk()
root.title("Listboxウィジェットの例")
# リストボックスの作成
listbox = tk.Listbox(root, selectmode="multiple")
listbox.pack()
# リストボックスに項目を追加
items = ["アイテム1", "アイテム2", "アイテム3", "アイテム4"]
for item in items:
listbox.insert(tk.END, item)
# ボタンの作成
button = tk.Button(root, text="選択内容を表示", command=show_selection)
button.pack()
root.mainloop()

解説
Listbox
ウィジェットは、insert()メソッド
を使って項目を追加します。
curselection()メソッド
で選択された項目のインデックスを取得し、get()メソッド
でそのインデックスに対応する項目を取得します。
表示関連のウィジェット
Tkinterには、ユーザーに情報を表示するためのさまざまなウィジェットが用意されています。
ここでは、メッセージ表示や進捗バー、スクロールバーなど、表示に関連するウィジェットについて説明します。
Message(メッセージ表示)
Message
ウィジェットは、長いテキストを自動的に折り返して表示するためのウィジェットです。
Label
ウィジェットと似ていますが、長いテキストを扱う場合に便利です。
import tkinter as tk
root = tk.Tk()
root.title("Messageウィジェットの例")
# 長いメッセージの作成
message_text = "これは長いメッセージです。自動的に折り返されて表示されます。"
# メッセージウィジェットの作成
message = tk.Message(root, text=message_text, width=200)
message.pack()
root.mainloop()

解説
Message
ウィジェットは、Label
ウィジェットと同様にテキストを表示しますが、長いテキストを自動的に折り返して表示する点が異なります。
width
引数で表示領域の幅を指定できます。
LabelFrame(ラベル付きフレーム)
LabelFrame
ウィジェットは、ラベル付きのフレームを作成します。
フレーム内に他のウィジェットを配置し、グループ化する際に使用されます。
import tkinter as tk
root = tk.Tk()
root.title("LabelFrameウィジェットの例")
# ラベル付きフレームの作成
labelframe = tk.LabelFrame(root, text="設定", padx=10, pady=10)
labelframe.pack(padx=10, pady=10)
# フレーム内にウィジェットを配置
label = tk.Label(labelframe, text="オプション1")
label.pack()
button = tk.Button(labelframe, text="ボタン")
button.pack()
root.mainloop()

解説
LabelFrame
ウィジェットは、他のウィジェットをグループ化するためのフレームにラベルを付けることができます。
padx
やpady
引数でフレーム内の余白を指定できます。
Progressbar(進捗バー)
Progressbar
ウィジェットは、処理の進捗状況を視覚的に表示するためのウィジェットです。
ファイルのダウンロードやタスクの進行状況を示す際に使用されます。
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Progressbarウィジェットの例")
# 進捗バーの作成
progressbar = ttk.Progressbar(root, orient="horizontal", length=200, mode="determinate")
progressbar.pack(pady=20)
# 進捗バーの値を設定
progressbar["value"] = 50 # 50%の進捗を表示
root.mainloop()

解説
Progressbar
ウィジェットは、ttk
モジュールから提供されるウィジェットです。
orient
引数で進捗バーの方向(水平または垂直)を指定し、length
引数でバーの長さを指定します。
value
プロパティで進捗の割合を設定できます。
Scrollbar(スクロールバー)
Scrollbar
ウィジェットは、他のウィジェット(例: Text
やListbox
)にスクロール機能を追加するためのウィジェットです。
大量のデータを表示する際に便利です。
import tkinter as tk
root = tk.Tk()
root.title("Scrollbarウィジェットの例")
# テキストウィジェットの作成
text = tk.Text(root, height=10, width=40)
text.pack(side="left")
# スクロールバーの作成
scrollbar = tk.Scrollbar(root)
scrollbar.pack(side="right", fill="y")
# スクロールバーをテキストウィジェットにリンク
text.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=text.yview)
# テキストウィジェットにサンプルテキストを追加
for i in range(1, 21):
text.insert(tk.END, f"行 {i}\n")
root.mainloop()

解説
Scrollbar
ウィジェットは、他のウィジェットと連携してスクロール機能を提供します。
config()メソッド
を使って、スクロールバーとテキストウィジェットをリンクさせます。
yscrollcommand
引数でスクロールバーの動作を設定し、command
引数でスクロールバーが動いたときにテキストウィジェットをスクロールさせます。
メニュー関連のウィジェット
Tkinterには、アプリケーションにメニューを追加するためのウィジェットがいくつか用意されています。
ここでは、メニューやメニューボタン、オプションメニューなど、メニュー関連のウィジェットについて説明します。
Menu(メニュー)
Menu
ウィジェットは、アプリケーションのメインメニューやコンテキストメニューを作成するために使用されます。
ファイルメニューや編集メニューなど、複数のメニュー項目を持つメニューを作成できます。
import tkinter as tk
def new_file():
print("新しいファイルを作成")
def open_file():
print("ファイルを開く")
def save_file():
print("ファイルを保存")
root = tk.Tk()
root.title("Menuウィジェットの例")
# メニューバーの作成
menubar = tk.Menu(root)
# ファイルメニューの作成
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="新規作成", command=new_file)
filemenu.add_command(label="開く", command=open_file)
filemenu.add_command(label="保存", command=save_file)
filemenu.add_separator()
filemenu.add_command(label="終了", command=root.quit)
# メニューバーにファイルメニューを追加
menubar.add_cascade(label="ファイル", menu=filemenu)
# メニューバーをウィンドウに設定
root.config(menu=menubar)
root.mainloop()

解説
Menu
ウィジェットは、add_command()メソッド
を使ってメニュー項目を追加します。
add_cascade()メソッド
でメニューバーにメニューを追加し、config()メソッド
でウィンドウにメニューバーを設定します。
tearoff=0
は、メニューが切り離されないようにするオプションです。
Menubutton(メニューボタン)
Menubutton
ウィジェットは、クリックするとメニューが表示されるボタンを作成します。
通常のメニューバーとは異なり、特定のボタンにメニューを関連付けることができます。
import tkinter as tk
def option1():
print("オプション1が選択されました")
def option2():
print("オプション2が選択されました")
root = tk.Tk()
root.title("Menubuttonウィジェットの例")
# メニューボタンの作成
menubutton = tk.Menubutton(root, text="オプションを選択")
menubutton.pack()
# メニューの作成
menu = tk.Menu(menubutton, tearoff=0)
menu.add_command(label="オプション1", command=option1)
menu.add_command(label="オプション2", command=option2)
# メニューボタンにメニューを設定
menubutton.config(menu=menu)
root.mainloop()

解説
Menubutton
ウィジェットは、Menu
ウィジェットと組み合わせて使用します。
config()メソッド
でメニューボタンにメニューを関連付け、ボタンをクリックするとメニューが表示されます。
OptionMenu(オプションメニュー)
OptionMenu
ウィジェットは、ドロップダウン形式のメニューを作成し、ユーザーがその中から1つのオプションを選択できるウィジェットです。
選択肢が少ない場合に便利です。
import tkinter as tk
def show_selection(value):
print("選択されたオプション:", value)
root = tk.Tk()
root.title("OptionMenuウィジェットの例")
# 選択肢のリスト
options = ["オプション1", "オプション2", "オプション3"]
# 選択されたオプションを保持する変数
selected_option = tk.StringVar(value=options[0])
# オプションメニューの作成
option_menu = tk.OptionMenu(root, selected_option, *options, command=show_selection)
option_menu.pack()
root.mainloop()

解説
OptionMenu
ウィジェットは、StringVar変数
を使って選択されたオプションを保持します。
*options
で選択肢のリストを展開し、command
引数で選択されたときに実行される関数を指定します。
レイアウト管理
Tkinterでは、ウィジェットをウィンドウ内に配置するためのレイアウト管理方法がいくつか用意されています。
主に使用されるレイアウト管理方法には、Pack
、Grid
、Place
の3つがあります。
それぞれの方法を使って、ウィジェットをどのように配置するかを説明します。
Pack(パック)
Pack
は、ウィジェットを順番に配置する最もシンプルなレイアウト管理方法です。
ウィジェットを上下、左右、または中央に詰めて配置します。
配置の順序は、pack()メソッド
が呼ばれた順番に従います。
import tkinter as tk
root = tk.Tk()
root.title("Packレイアウトの例")
# ラベルウィジェットの作成
label1 = tk.Label(root, text="上に配置", bg="red")
label2 = tk.Label(root, text="中央に配置", bg="green")
label3 = tk.Label(root, text="下に配置", bg="blue")
# Packメソッドで配置
label1.pack(side="top", fill="x")
label2.pack(side="top", fill="x")
label3.pack(side="top", fill="x")
root.mainloop()

解説
Packメソッド
は、side
引数でウィジェットをどの方向に詰めるかを指定します。
fill
引数で、ウィジェットがどの方向に広がるかを指定できます。
x
を指定すると横方向に広がり、y
を指定すると縦方向に広がります。
Grid(グリッド)
Grid
は、ウィジェットを行と列のグリッドに配置するレイアウト管理方法です。
表形式のレイアウトを作成する際に便利です。
各ウィジェットは、row
とcolumn
の引数で指定された位置に配置されます。
import tkinter as tk
root = tk.Tk()
root.title("Gridレイアウトの例")
# ラベルウィジェットの作成
label1 = tk.Label(root, text="(0, 0)", bg="red")
label2 = tk.Label(root, text="(0, 1)", bg="green")
label3 = tk.Label(root, text="(1, 0)", bg="blue")
label4 = tk.Label(root, text="(1, 1)", bg="yellow")
# Gridメソッドで配置
label1.grid(row=0, column=0)
label2.grid(row=0, column=1)
label3.grid(row=1, column=0)
label4.grid(row=1, column=1)
root.mainloop()

解説
Gridメソッド
は、row
とcolumn
引数でウィジェットを配置する行と列を指定します。
グリッドのセルは自動的にサイズ調整され、ウィジェットが均等に配置されます。
複雑なレイアウトを作成する際に非常に便利です。
Place(プレース)
Place
は、ウィジェットを絶対座標または相対座標で配置するレイアウト管理方法です。
ウィジェットの位置をピクセル単位で正確に指定したい場合に使用されます。
import tkinter as tk
root = tk.Tk()
root.title("Placeレイアウトの例")
# ラベルウィジェットの作成
label1 = tk.Label(root, text="左上", bg="red")
label2 = tk.Label(root, text="中央", bg="green")
label3 = tk.Label(root, text="右下", bg="blue")
# Placeメソッドで配置
label1.place(x=0, y=0) # 左上に配置
label2.place(relx=0.5, rely=0.5, anchor="center") # 中央に配置
label3.place(relx=1.0, rely=1.0, anchor="se") # 右下に配置
root.mainloop()

解説
Placeメソッド
は、x
とy
引数で絶対座標を指定するか、relx
とrely
引数で相対座標(0.0から1.0の範囲)を指定してウィジェットを配置します。
anchor
引数で、ウィジェットの基準点を指定できます(例: "center"
は中央、"se"
は右下)。
応用例
ここでは、Tkinterの基本的なウィジェットやレイアウト管理を組み合わせて、実際のアプリケーションで使える応用例を紹介します。
これらの例を参考に、より複雑なGUIアプリケーションを作成することができます。
ウィジェットを組み合わせた簡単なフォーム作成
Tkinterの基本的なウィジェットを組み合わせて、ユーザーからの入力を受け取る簡単なフォームを作成します。
ここでは、名前とメールアドレスを入力し、送信ボタンを押すと入力内容が表示されるフォームを作成します。
import tkinter as tk
def submit_form():
name = entry_name.get()
email = entry_email.get()
print(f"名前: {name}, メール: {email}")
root = tk.Tk()
root.title("簡単なフォーム")
# 名前入力フィールド
label_name = tk.Label(root, text="名前:")
label_name.grid(row=0, column=0)
entry_name = tk.Entry(root)
entry_name.grid(row=0, column=1)
# メール入力フィールド
label_email = tk.Label(root, text="メール:")
label_email.grid(row=1, column=0)
entry_email = tk.Entry(root)
entry_email.grid(row=1, column=1)
# 送信ボタン
button_submit = tk.Button(root, text="送信", command=submit_form)
button_submit.grid(row=2, columnspan=2)
root.mainloop()

解説
この例では、Label
、Entry
、Button
ウィジェットを組み合わせてフォームを作成しています。
Grid
レイアウトを使用して、ウィジェットを行と列に配置しています。
キャンバスを使った描画アプリケーション
Canvas
ウィジェットを使って、ユーザーがマウスで自由に描画できる簡単なアプリケーションを作成します。
import tkinter as tk
def draw(event):
x, y = event.x, event.y
canvas.create_oval(x-2, y-2, x+2, y+2, fill="black")
root = tk.Tk()
root.title("描画アプリケーション")
# キャンバスの作成
canvas = tk.Canvas(root, bg="white", width=400, height=300)
canvas.pack()
# マウスドラッグで描画
canvas.bind("<B1-Motion>", draw)
root.mainloop()

解説
Canvas
ウィジェットを使って、マウスのドラッグ操作で描画を行います。
bind()メソッド
を使って、マウスの動きをキャッチし、create_oval()メソッド
で小さな円を描画しています。
メニュー付きのウィンドウ作成
Menu
ウィジェットを使って、ファイルメニューや編集メニューを持つウィンドウを作成します。
import tkinter as tk
def new_file():
print("新しいファイルを作成")
def open_file():
print("ファイルを開く")
def save_file():
print("ファイルを保存")
root = tk.Tk()
root.title("メニュー付きウィンドウ")
# メニューバーの作成
menubar = tk.Menu(root)
# ファイルメニューの作成
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="新規作成", command=new_file)
filemenu.add_command(label="開く", command=open_file)
filemenu.add_command(label="保存", command=save_file)
filemenu.add_separator()
filemenu.add_command(label="終了", command=root.quit)
# メニューバーにファイルメニューを追加
menubar.add_cascade(label="ファイル", menu=filemenu)
# メニューバーをウィンドウに設定
root.config(menu=menubar)
root.mainloop()

解説
Menu
ウィジェットを使って、メニューバーを作成し、ファイルメニューを追加しています。
add_command()メソッド
でメニュー項目を追加し、add_cascade()メソッド
でメニューバーにメニューを追加します。
スクロール可能なリスト表示
Listbox
ウィジェットとScrollbar
ウィジェットを組み合わせて、スクロール可能なリストを表示します。
import tkinter as tk
root = tk.Tk()
root.title("スクロール可能なリスト")
# リストボックスの作成
listbox = tk.Listbox(root, height=10)
listbox.pack(side="left", fill="y")
# スクロールバーの作成
scrollbar = tk.Scrollbar(root)
scrollbar.pack(side="right", fill="y")
# スクロールバーをリストボックスにリンク
listbox.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=listbox.yview)
# リストボックスに項目を追加
for i in range(1, 101):
listbox.insert(tk.END, f"アイテム {i}")
root.mainloop()

解説
Listbox
ウィジェットとScrollbar
ウィジェットを連携させて、スクロール可能なリストを作成しています。
config()メソッド
を使って、リストボックスとスクロールバーをリンクさせています。
複数ウィンドウを持つアプリケーション
Toplevel
ウィジェットを使って、メインウィンドウとは別に新しいウィンドウを開くアプリケーションを作成します。
import tkinter as tk
def open_new_window():
new_window = tk.Toplevel(root)
new_window.title("新しいウィンドウ")
label = tk.Label(new_window, text="これは新しいウィンドウです")
label.pack()
root = tk.Tk()
root.title("複数ウィンドウの例")
# ボタンの作成
button = tk.Button(root, text="新しいウィンドウを開く", command=open_new_window)
button.pack()
root.mainloop()
メインウィンドウに「新しいウィンドウを開く」というボタンが表示され、クリックすると新しいウィンドウが開きます。
解説
Toplevel
ウィジェットを使って、メインウィンドウとは別に新しいウィンドウを作成しています。
Toplevel
ウィジェットは、独立したウィンドウとして動作しますが、メインウィンドウが閉じられると一緒に閉じられます。
まとめ
この記事では、Tkinterの基本的なウィジェットやレイアウト管理、応用例について具体的なサンプルコードを交えながら解説しました。
これにより、Tkinterを使ったGUIアプリケーションの作成方法や、ウィジェットの配置、スタイルの変更、イベント処理の基本的な流れを理解できたはずです。
ぜひ、この記事で紹介した内容をもとに、実際にコードを書いて自分のアプリケーションを作成してみてください。