Python Code Notes

Information by python engineer

【tkinter】Motionイベントを利用したマウスの現在位置取得【Python】

tkinterで利用できるMotionイベントを使ってマウスの現在位置を表示させる方法を、実際にコードを書きながらまとめました。

【スポンサーリンク】

Motionイベントの概要

ウィジェット上でマウスポインタの移動やクリックを行うと、様々なイベントが発生します。

例えば、マウスポインタがtkinterのウィジェット上に移動したときにはMotionイベントが発生し、クリック時にはButtonイベント、クリック解除時にはButtonRelease等のイベントが発生します。

今回は、Motionイベントを利用して、ウィジェット上のマウスポインタの現在位置をリアルタイムで表示させるプログラムを作成してみます。

応用例:マウスポインタがウィジェットに重なった際に色を変更 www.python-beginners.com

マウスポインタの現在位置表示

作成したウィジェットを以下に示します。ラベルウィジェット上でマウスポインタを動かすと、座標をラベル上にリアルタイムで表示します。

コード

import tkinter

class MousePosition(tkinter.Label):
    '''
    マウスポインタの座標を表示するラベル
    '''
    def __init__(self, master):
        # 適当な大きさに設定
        super().__init__(
            master,
            text="mouse position",
            width=50,
            height=20,
        )

        # Label上で<Motion>イベント発生時、
        # show_positionを実行するように設定
        self.bind("<Motion>", self.show_position)

    def show_position(self, event):
        x, y = event.x, event.y     # x,y座標取得
        self["text"] = str(x) + ", " + str(y)   # 座標表示

#ラベルの表示
if __name__ == "__main__":
    root = tkinter.Tk()
    l = MousePosition(root)
    l.pack()
    root.mainloop()
      

Motionイベントと関数の紐づけ

以下の様にイベントと関数をbindで紐づけることで、ウィジェット上でイベントが発生したとき、指定した関数を実行させることが可能になります。

ウィジェット.bind(イベント名, 関数)

今回は、Label(self)上でMotionイベントが発生したとき、show_positionを実行するように設定しています。

【スポンサーリンク】