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

Python Tkinterでイベントを関数にバインドする方法【キーボード・マウス対応】


Pythonの標準GUIライブラリであるTkinterは、デスクトップアプリケーション開発に広く利用されています。GUIプログラミングにおいて重要な概念の一つが「バインディング(Binding)」です。これは、ウィジェットやウィンドウに対してイベント(キー入力やマウス操作など)を関数やメソッドに関連付け、そのイベントが発生したタイミングで特定の関数が自動的に実行される仕組みです。

本記事では、Tkinterにおけるバインディングの基本として、キーボードイベントとマウスクリックイベントを関数に紐付ける方法を具体例とともに解説します。

キーボードイベントのバインド

まずは、キーボードの任意のキーが押されたときに関数を実行する例を見てみましょう。bind()メソッドを使って <Key> イベントを関数に結び付けることで、GUIウィンドウが開いている状態でキーボードのどのキーを押しても、「キーが押された」というメッセージが出力されます。

サンプルコード

from tkinter import *

# キーボードのボタンが押されたときに呼ばれる関数
def PressAnyKey(label):
    value = label.char
    print(value, ' A button is pressed')

base = Tk()
base.geometry('300x150')
base.bind('<Key>', lambda i : PressAnyKey(i))
mainloop()

実行結果

上記のコードを実行すると、以下のような結果が得られます。

Python Tkinterでイベントを関数にバインドする方法【キーボード・マウス対応】

マウスクリックイベントのバインド

次に、Tkinterウィンドウ上でのマウスクリックイベントを関数呼び出しにバインドする方法を紹介します。下記の例では、左ボタンのダブルクリック・右ボタンのクリック・スクロールボタン(中央ボタン)のクリックという3種類のイベントをそれぞれ別の関数にバインドし、クリックされた位置(x座標・y座標)をコンソールに出力します。

サンプルコード

from tkinter import *
from tkinter.ttk import *

# tkinterウィンドウ(ルートウィンドウ)を作成
base = Tk()
base.geometry('300x150')

# スクロールボタンが押されたときに呼ばれる関数
def scroll(label):
    print('Scroll button clicked at x = % d, y = % d'%(label.x, label.y))

# 右ボタンが押されたときに呼ばれる関数
def right_click(label):
    print('right button clicked at x = % d, y = % d'%(label.x, label.y))

# 左ボタンがダブルクリックされたときに呼ばれる関数
def left_click(label):
    print('Double clicked left button at x = % d, y = % d'%(label.x, label.y))

Function = Frame(base, height = 100, width = 200)
Function.bind('<Button-2>', scroll)
Function.bind('<Button-3>', right_click)
Function.bind('<Double 1>', left_click)
Function.pack()
mainloop()

実行結果

上記のコードを実行すると、以下のような結果が得られます。

Python Tkinterでイベントを関数にバインドする方法【キーボード・マウス対応】

まとめ

Tkinterのbind()メソッドを使えば、キーボードやマウスのさまざまな操作を簡単に特定の関数へ関連付けることができます。イベント文字列(<Key><Button-1><Double 1> など)を指定するだけで直感的に実装できるため、インタラクティブなデスクトップアプリケーション開発の第一歩としてぜひ活用してみてください。

  1. Pythonのissubset()関数とは?部分集合の判定方法を実例付きで解説

    本記事では、Python標準ライブラリに用意されているissubset()関数の仕組みと使い方について詳しく解説します。 issubset()メソッドは、あるセット(集合)のすべての要素が、引数として渡した別のセットにも含まれている場合にブール値のTrueを返し、1つでも含まれていない要素があればFalseを返します。 下の図では、BはAの部分集合です。もしAとBが同一のセットであれば、両者は互いに部分集合の関係にあるといえます。つまり、両方のセットがまったく同じ要素を持っているということを意味します。 構文 <set 1>.issubset(<set 2>) 戻り値

  2. Pythonのintersection()関数とは?集合の共通要素(積集合)を求める方法

    この記事では、Pythonのセット(集合)に対して実行できるintersection()関数について詳しく解説します。数学における「積集合(インターセクション)」とは、2つの集合から共通する要素を見つけ出すことを指します。構文<セット名>.intersection(<セットa1>, <セットa2>, …)戻り値引数として渡されたすべての集合に共通する要素(積集合)が、新しいセットとして返されます。使用例set_1 = {t,u,t,o,r,i,a,l} set_2 = {p,o,i,n,t} set_3 = {t,u,t} # 2つの集合の積集合 print