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

【Python】EscapeキーをバインドしてTkinterウィンドウを閉じる方法


Tkinterのイベント機能は、アプリケーションをインタラクティブで使いやすいものにするために非常に便利です。クリックやキー入力といったユーザー操作をきっかけに、アプリケーション内部の処理を呼び出すことができます。

Tkinterでイベントを登録するには、一般的に bind(キー, コールバック) メソッドを使用します。このメソッドを使えば、任意のキーに対して特定の処理を割り当てることが可能です。

たとえば Esc キーを押したときにアプリケーションウィンドウを閉じたい場合は、bind(key, callback) の第1引数にキー、第2引数にコールバック関数を渡します。Escキーに対応するイベント文字列は <Escape> です。

サンプルコード

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

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

# ウィンドウサイズを設定
win.geometry("700x350")

# コンボボックスウィジェット用のスタイルを定義
style = ttk.Style()
style.theme_use('xpnative')

# ウィンドウを閉じるためのイベントを定義
def close_win(e):
    win.destroy()

# ラベルウィジェットを追加
label = ttk.Label(win, text="Eat, Sleep, Code and Repeat", font=('Times New Roman italic', 18), background="black", foreground="white")
label.place(relx=.5, rely=.5, anchor=CENTER)
ttk.Label(win, text="ESCキーを押すとこのウィンドウが閉じます", font=('Aerial 11')).pack(pady=10)

# ESCキーにコールバック関数をバインド
win.bind('<Escape>', lambda e: close_win(e))

win.mainloop()

実行結果

上記のコードを実行すると、画面中央にメッセージが表示されたウィンドウが現れます。この状態で「Esc」キーを押すと、ウィンドウは即座に閉じられます。

ここでのポイントは、close_win(e) 関数内で呼び出している win.destroy() です。このメソッドによってウィンドウが破ウィンドウが破棄され、アプリケーションが終了します。また、ラムダ式 lambda e: close_win(e) を使うことで、発生したイベントオブジェクトをそのままコールバック関数へ渡しています。

補足:他のキーにも同じ手法が使える

この考え方はEscキー以外にも応用できます。例えば win.bind('<Return>', callback) でEnterキー、win.bind('<space>', callback) でスペースキーに処理を割り当てることが可能です。独自のショートカットキーを実装したい場合に、ぜひ活用してみてください。

  1. Tkinterウィンドウを常に他のウィンドウの最前面に表示する方法

    GUIプログラムを作成する際、Tkinterのウィンドウはデフォルトでは他のアプリケーションの背後に表示されることがあります。つまり、プログラムを実行しても、そのウィンドウが他のソフトウェアの裏側に隠れてしまうケースがあるのです。 Tkinterウィンドウを常に他のウィンドウより前面に表示させたい場合は、attributes(-topmost, True) プロパティを使用します。この設定を行うことで、ウィンドウが最前面に固定され、ユーザーが他のアプリケーションを操作している間も、常に手前に表示され続けるようになります。 コード例 # ライブラリのインポート from tkinter impo

  2. tkinterでウィンドウを閉じる方法|destroy()メソッドの使い方を解説

    tkinterを使えば、Pythonで手軽にGUIアプリケーションを作成できます。しかし、タイトルバー右上の×ボタン以外の方法でウィンドウやフレームを閉じたい場合、どのように実装すればよいか悩むこともあるでしょう。そのようなときに役立つのが、ウィンドウを破棄して閉じるための .destroy() メソッドです。tkinterの各ウィジェットや属性は互いに独立しているため、「ウィンドウを閉じる処理」を専用の関数として分離して定義できます。これにより、ボタンのクリックイベントからウィンドウを閉じる動作を自由に制御可能です。サンプルコード# ライブラリをインポート from tkinter impo