2014-04-08 9 views
12

Czy istnieje sposób, aby uzyskać pozycję myszy i ustawić ją jako var?Pozycja myszy Python Tkinter

+0

Zobacz również: [Uzyskaj aktywnego okna przy użyciu Python] (http: //stackoverflow.com/q/10266281/562769) –

Odpowiedz

15

Można założyć zwrotnego reagować na <Motion> zdarzeń:

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() 

Nie jestem pewien, jaki rodzaj zmiennej chcesz. Powyżej ustawiam zmienne lokalne x i y na współrzędne myszy.

Jeśli uczynisz motion metodą klasową, możesz ustawić atrybuty instancji self.x i self.y na współrzędne myszy, które mogą być następnie dostępne z innych metod klasy.

+0

Czy mogę zwrócić jako var? – Kpfromer

+0

Cóż, nic nie odbiera zwracanej wartości wywołania zwrotnego, więc nie byłoby użyteczne zwracanie jej z 'ruchu'. – unutbu

+0

Czy mogę ustawić x, y jako var funkcji? – Kpfromer

16

W dowolnym momencie można użyć metody winfo_pointerx i winfo_pointery, aby uzyskać współrzędne x, y względem okna głównego. Aby przekonwertować że do absolutnego ekranie współrzędne można uzyskać winfo_pointerx lub winfo_pointery, i od tego odjąć odpowiedniej winfo_rootx lub winfo_rooty

na przykład:

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() 
+0

Jest to przydatne, gdy chcesz pobrać tabeid zakładki ttk :: notebook, która została kliknięta z wnętrza chwytaka ekranu (notebook jest zewnętrzny do widżetu toplevel). – Kumba

+1

To wydaje się być lepszą odpowiedzią. – Haboryme