マウスの位置を取得して変数として設定する方法はありますか?
<Motion>
イベントに反応するコールバックを設定できます。
import Tkinter as tk
root = tk.Tk()
def motion(event):
x, y = event.x, event.y
print('{}, {}'.format(x, y))
root.bind('<Motion>', motion)
root.mainloop()
どのような変数が必要なのかわかりません。上記では、ローカル変数x
およびy
をマウス座標に設定しています。
motion
をクラスメソッドにすると、インスタンス属性self.x
およびself.y
をマウス座標に設定でき、他のクラスメソッドからアクセスできるようになります。
いつでもメソッドwinfo_pointerx
およびwinfo_pointery
を使用して、ルートウィンドウに相対的なX、Y座標を取得できます。それを絶対スクリーン座標に変換するには、winfo_pointerx
またはwinfo_pointery
を取得し、そこからそれぞれwinfo_rootx
またはwinfo_rooty
を減算します
例えば:
root = tk.Tk()
...
x = root.winfo_pointerx()
y = root.winfo_pointery()
abs_coord_x = root.winfo_pointerx() - root.winfo_rootx()
abs_coord_y = root.winfo_pointery() - root.winfo_rooty()
個人的には、Tkinterと組み合わせてもpyautogui
を使用することを好みます。 Tkinterアプリに限定されませんが、デュアルスクリーン構成でも、画面全体で動作します。
import pyautogui
x, y = pyautogui.position()
さまざまな位置を保存する場合は、オンクリックイベントを追加します。
元の質問はTkinterについてです。
ブライアンの答えを改善したいと思います。これは、モニターが1台の場合にのみ機能しますが、複数のモニターがある場合は、常にメインモニターに対する座標を使用します。両方のモニターに対して相対的な位置を見つけて正確な位置を取得するには、このようにvroot
の代わりにroot
を使用します
root = tk.Tk()
...
x = root.winfo_pointerx()
y = root.winfo_pointery()
abs_coord_x = root.winfo_pointerx() - root.winfo_vrootx()
abs_coord_y = root.winfo_pointery() - root.winfo_vrooty()