Tkinterでカスタムポップアップダイアログボックスを実装する正しい方法
Tkinterには、Pythonにあらかじめ実装されている数多くの組み込み関数やモジュールが用意されています。そのひとつがMessageBoxモジュールで、関連する関数を呼び出すだけで、どんなアプリケーションでも簡単に利用できます。
しかしこれらの標準パッケージには大きな制限があります。それはMessageBoxのテンプレートを変更・カスタマイズできないという点です。アプリのデザインに合わせたオリジナルの確認ダイアログを作りたい場合、標準機能だけでは対応できません。
そこで本記事では、Toplevelウィンドウを活用してカスタムポップアップMessageBoxを実装する方法を解説します。実装の手順は以下の通りです。
- ボタンを作成し、commandオプションで呼び出す関数を定義する
- Toplevelウィンドウを生成する関数を作り、必要なウィジェットを追加する
- Toplevelウィンドウ内に確認用のラベルテキストとボタンを配置する
- ボタンのcommandで、メインウィンドウ側に結果メッセージを表示する処理を紐付ける
サンプルコード
# 必要なライブラリをインポート
from tkinter import *
from tkinter import ttk
# tkinterフレームのインスタンスを作成
win = Tk()
# ウィンドウサイズを設定
win.geometry("700x250")
# ユーザーの選択を処理する関数
def choice(option):
pop.destroy()
if option == "yes":
label.config(text="Hello, How are You?")
else:
label.config(text="You have selected No")
def click_fun():
global pop
# Toplevelウィンドウ(ポップアップ)を生成
pop = Toplevel(win)
pop.title("Confirmation")
pop.geometry("700x250")
pop.config(bg="green3")
# 確認メッセージのラベルを作成
label = Label(pop, text="Would You like to Proceed?",
bg="green3", fg="white", font=('Aerial', 12))
label.pack(pady=20)
# ボタンを格納するフレームを追加
frame = Frame(pop, bg="green3")
frame.pack(pady=10)
# 「はい」「いいえ」の選択ボタンを作成
button1 = Button(frame, text="Yes",
command=lambda: choice("yes"), bg="green")
button1.grid(row=0, column=1)
button2 = Button(frame, text="No",
command=lambda: choice("no"), bg="green")
button2.grid(row=0, column=2)
# メインウィンドウに結果を表示するラベル
label = Label(win, text="", font=('Aerial', 14))
label.pack(pady=40)
# ポップアップを開くためのボタン
ttk.Button(win, text="Click Here", command=click_fun).pack()
win.mainloop()実行結果
上記のコードを実行すると、まず「Click Here」ボタンが配置されたメインウィンドウが表示されます。

このボタンをクリックすると、緑色の背景を持つカスタムポップアップメッセージボックスが表示され、「Yes」または「No」を選択できます。選択結果に応じて、メインウィンドウのラベルに対応したメッセージが表示される仕組みです。

ポイントまとめ
この方法のポイントは、Toplevelクラスを使うことで、メインウィンドウとは独立した新しいウィンドウを自由にデザインできる点にあります。背景色・フォント・ウィジェットのレイアウトまで思い通りに制御できるため、アプリケーションのテーマに統一感のあるダイアログを実現できます。標準のmessageboxでは物足りないと感じたら、ぜひこの手法を試してみてください。
-
Tkinterでラベルのテキストを取得する方法を解説
TkinterのLabel(ラベル)ウィジェットは、ウィンドウ上にテキストや画像を表示するために使用される基本的なコンポーネントです。フォントファミリーやパディング、幅・高さなどのオプションを指定することで、ラベルの見た目を自由にカスタマイズできます。ラベルに設定したテキストを取得したい場合は、ラベルウィジェットに対して [text] を指定するだけで、簡単にその値へアクセスできます。以下に具体的なサンプルコードを示します。サンプルコード# 必要なライブラリをインポート from tkinter import * # tkinterフレームのインスタンスを作成 win = Tk() # ウ
-
Tkinterでマウスカーソルを変更する方法【cursorプロパティ活用ガイド】
Tkinterは、Pythonに標準搭載されているGUIライブラリで、さまざまな機能的なデスクトップアプリケーションを開発するために広く利用されています。豊富な関数やメソッドが用意されており、アプリケーション開発時に高い拡張性と多彩な機能を実現できます。 本記事では、Tkinterのcursor(カーソル)プロパティを使って、ボタン上にマウスを乗せたときのカーソル形状を変更する方法を解説します。Tkinterのウィジェットには多数のカーソルマップが用意されており、エンドユーザーにさまざまな視覚的なフィードバックを提供できます。 Tkinterで利用できる主なカーソル一覧 cursorプロパテ