Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】tkinterでモーダルダイアログを作成する方法をわかりやすく解説

ダイアログボックスは、あらゆるアプリケーションにおいて欠かせない重要なUI要素です。ユーザーからの確認や選択を受け取るために使われ、アプリケーションとユーザーをつなぐインターフェースとして機能します。

tkinterアプリケーションでは、Toplevelウィンドウと各種ウィジェットを組み合わせることで、自由にカスタマイズしたダイアログボックスを作成できます。Toplevelウィンドウは、メインウィンドウを含む他のすべてのウィンドウよりも前面に表示されるため、これを利用してポップアップ形式のダイアログを簡単に実装できます。

モーダルダイアログの作成手順

この記事では、「処理を続行するかどうか」を尋ねる確認ダイアログ(モーダルダイアログ)を作成します。実装は以下のステップで構成されています。

  • Toplevelウィンドウの初期化
  • ポップアップ表示用の関数定義
  • Toplevelウィンドウへのウィジェット(ラベル・ボタンなど)の配置
  • ダイアログでの選択結果を処理する関数の定義

サンプルコード

# 必要なライブラリをインポート
from tkinter import *
from tkinter import ttk

# tkinterフレームのインスタンスを作成
win = Tk()

# ウィンドウサイズを設定
win.geometry("700x350")
style = ttk.Style()
style.theme_use('clam')

# 選択結果を処理する関数を定義
def choice(option):
    pop.destroy()
    if option == "yes":
        label.config(text="Hello, How are You?")
    else:
        label.config(text="You have selected No")
        win.destroy()

def click_fun():
    global pop
    # Toplevelウィンドウ(ダイアログ)を作成
    pop = Toplevel(win)
    pop.title("Confirmation")
    pop.geometry("300x150")
    pop.config(bg="white")
    # ラベルテキストを作成
    label = Label(pop, text="Would You like to Proceed?",
    font=('Aerial', 12))
    label.pack(pady=20)
    # フレームを追加
    frame = Frame(pop, bg="gray71")
    frame.pack(pady=10)
    # 選択用のボタンを配置
    button1 = Button(frame, text="Yes", command=lambda: choice("yes"), bg="blue", fg="white")
    button1.grid(row=0, column=1)
    button2 = Button(frame, text="No", command=lambda: choice("no"), bg="blue", fg="white")
    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」というボタンが表示されます。

【Python】tkinterでモーダルダイアログを作成する方法をわかりやすく解説

このボタンをクリックすると、確認用のモーダルダイアログが画面の前面にポップアップ表示されます。「Yes」を選択するとメインウィンドウのラベルテキストが更新され、「No」を選択するとアプリケーションが終了します。

【Python】tkinterでモーダルダイアログを作成する方法をわかりやすく解説

補足:完全なモーダルダイアログにするには

上記のコードでは、ダイアログが最前面に表示されますが、厳密にはメインウィンドウも操作可能な状態です。ダイアログが閉じられるまで他のウィンドウ操作を完全にブロックしたい場合は、Toplevelウィンドウに対して pop.grab_set() を呼び出してください。これにより、入力フォーカスがダイアログに固定され、真の意味での「モーダル」な動作を実現できます。

  1. Tkinterでウィジェットを非表示にする方法|pack_forget()の使い方を解説

    Tkinterアプリケーションでウィジェットを一時的に非表示にしたい場合、pack_forget()メソッドを使用します。このメソッドは、ウィンドウ上からウィジェットのマッピングを解除し、画面から見えなくするために広く使われています。pack_forget()メソッドとはpack_forget()は、pack()ジオメトリマネージャーで配置されたウィジェットを非表示にするためのメソッドです。非表示にされたウィジェットは破棄されるわけではなく、再びpack()を呼び出せば元の状態で再表示できるのが特徴です。サンプルコード以下の例では、ラベルテキストとボタンを作成し、ボタンをクリックするとラベルが

  2. Tkinterで簡単な画面(ウィンドウ)を作成する方法【初心者向け】

    Pythonの標準GUIライブラリ「Tkinter」を使えば、わずか数行のコードで簡単な画面(ウィンドウ)を作成できます。追加のインストールは不要で、Pythonさえあればすぐに試せるのが魅力です。この記事では、Tkinterによる基本的なウィンドウの作り方を手順付きで解説します。 作成手順(アルゴリズム) シンプルな画面を作る流れは、以下の3ステップです。 ステップ1:tkinterモジュールをインポートする ステップ2:Tkクラスのオブジェクト(ウィンドウ)を作成する ステップ3:イベントループを開始して画面を表示する サンプルコード import tkinter as tk # ウィン