2014-04-08 15 views
12

C'è un modo per ottenere la posizione del mouse e impostarlo come var?Mouse Python Tkinter

+0

Vedi anche: [Ottenere finestra attiva utilizzando Python] (http: //stackoverflow.com/q/10266281/562769) –

risposta

15

È possibile impostare una richiamata a reagire a <Motion> eventi:

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

Non sono sicuro di che tipo di variabili che si desidera. Sopra, ho impostato le variabili locali x e con le coordinate del mouse.

Se si esegue motion un metodo di classe, è possibile impostare gli attributi di istanza self.x e self.y sulle coordinate del mouse, che potrebbero quindi essere accessibili da altri metodi di classe.

+0

Potrei restituirlo come una var? – Kpfromer

+0

Bene, niente riceve il valore di ritorno del callback, quindi non sarebbe utile restituirlo da 'motion'. – unutbu

+0

Posso impostare x, y come var nella funzione? – Kpfromer

16

In qualsiasi momento è possibile utilizzare il metodo winfo_pointerx e winfo_pointery per ottenere le coordinate x, y relative alla finestra radice. Per convertire che a schermo coordinate assolute è possibile ottenere il winfo_pointerx o winfo_pointery, e da quel sottrarre il rispettivo winfo_rootx o winfo_rooty

Ad esempio:

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

Questo è utile quando si desidera recuperare il tab_id di una scheda ttk :: del notebook su cui è stato fatto clic da all'interno di un oggetto toplevel (il notebook è esterno al widget di livello superiore). – Kumba

+1

Questa sembra essere la risposta migliore. – Haboryme