GUI

[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ウィジェットは、他のウィジェットをグループ化して整理するために使用されます。

borderwidthreliefオプションでフレームの外観をカスタマイズできます。

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ウィジェットは、他のウィジェットをグループ化するためのフレームにラベルを付けることができます。

padxpady引数でフレーム内の余白を指定できます。

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ウィジェットは、他のウィジェット(例: TextListbox)にスクロール機能を追加するためのウィジェットです。

大量のデータを表示する際に便利です。

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では、ウィジェットをウィンドウ内に配置するためのレイアウト管理方法がいくつか用意されています。

主に使用されるレイアウト管理方法には、PackGridPlaceの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は、ウィジェットを行と列のグリッドに配置するレイアウト管理方法です。

表形式のレイアウトを作成する際に便利です。

各ウィジェットは、rowcolumnの引数で指定された位置に配置されます。

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メソッドは、rowcolumn引数でウィジェットを配置する行と列を指定します。

グリッドのセルは自動的にサイズ調整され、ウィジェットが均等に配置されます。

複雑なレイアウトを作成する際に非常に便利です。

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メソッドは、xy引数で絶対座標を指定するか、relxrely引数で相対座標(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()

解説

この例では、LabelEntryButtonウィジェットを組み合わせてフォームを作成しています。

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アプリケーションの作成方法や、ウィジェットの配置、スタイルの変更、イベント処理の基本的な流れを理解できたはずです。

ぜひ、この記事で紹介した内容をもとに、実際にコードを書いて自分のアプリケーションを作成してみてください。

関連記事

Back to top button
目次へ