Python3のTkinterでキーボードショートカットを実装する方法
Tkinterのウィンドウには、さまざまなアプリケーション開発に活用できる多くの組み込み機能が備わっています。アプリケーションの中で特定の処理を、キー操作やファンクションキーで実行したいケースは少なくありません。
このような要件は、実行したい処理を含むコールバック関数と特定のキーをbindメソッドで関連付けることで実現できます。バインドできるキーはマウスボタンからキーボードの各キーまで幅広く、さらにキーの組み合わせ(ショートカット)をコールバックに関連付けることも可能です。
実装例:Ctrl + x でウィンドウを閉じる
以下のサンプルでは、「Ctrl + x」が押されたときにウィンドウを閉じるショートカットを実装しています。
#Import the Tkinter Library
from tkinter import *
#Create an instance of Tkinter Frame
win = Tk()
#Set the geometry of window
win.geometry("700x350")
#Define a callback function for exit
def quit_program(e):
win.destroy()
#Add a Label widget
label = Label(win, text= "Press Ctrl + x to Exit", font= ('Helvetica 15 bold'))
label.pack(pady= 40)
#Bind the Keyboard shortcut Key
win.bind('', quit_program)
win.mainloop() 実行結果
上記のコードでは、win.bind('<Control-x>', quit_program) の部分でキーの組み合わせをウィジェットにバインドしています。「Ctrl + x」を押すと quit_program 関数が呼び出され、destroy() メソッドによってウィンドウが閉じられます。

ポイント解説
- イベント文字列の書式: キーバインドは
<修飾子-キー>の形式で指定します。代表的な修飾子にはControl、Alt、Shiftなどがあります。 - コールバック引数: バインドされた関数にはイベントオブジェクトが引数として渡されるため、上記のように仮引数
eを定義しておく必要があります。 - 単一キーのバインド: 組み合わせだけでなく、
'<Return>'(Enterキー)や'<Escape>'(Escキー)のような単一キーも同様にバインドできます。
この仕組みを応用すれば、保存(Ctrl + S)やコピー(Ctrl + C)といった、一般的なデスクトップアプリケーションと同じ操作性を持つGUIアプリを簡単に構築できます。
-
Tkinterウィンドウのサイズを固定して変更不可にする方法
Tkinterでは、ウィジェットのサイズに応じてフレームが自動的にリサイズされることがあります。ウィンドウやフレームのサイズを一定に保ちたい場合は、ウィジェットによるフレームのリサイズを防ぐ必要があります。そのために使える主な方法は以下の3つです。pack_propagate(True/False):ブール値を指定することで、ウィジェットによるフレームのリサイズを防止します。False(0)を指定すると、親フレームは子ウィジェットに合わせてサイズが変わらなくなります。resizable(x, y):ユーザーがマウス操作などでウィンドウ自体のサイズを変更できないようにします。引数には幅と高さそれ
-
Python Tkinterでメッセージボックスの表示位置を変更する方法
Tkinterを使ってダイアログボックスを作成したい場合、MessageBoxライブラリを利用すると、さまざまな種類のダイアログを手軽に生成できます。作成したダイアログボックスの位置を調整するには、Toplevelウィジェットを使用します。Toplevelは、現在のウィンドウを最前面に優先表示し、他の処理をバックグラウンドで維持する役割を持ちます。さらに、title(タイトル)、message(メッセージ)、details(詳細)といった機能も備えています。メッセージボックスウィジェットの表示位置を変更するには、geometryメソッドを使います。コード例# tkinterライブラリをインポー