2014-04-08 26 views
12

Gibt es eine Möglichkeit, die Position der Maus zu erhalten und sie als Var zu setzen?Maus Position Python Tkinter

+0

Siehe auch: [Erhalten Sie Aktives Fenster mit Python] (http: //stackoverflow.com/q/10266281/562769) –

Antwort

15

Sie können einen Rückruf einrichten zu <Motion> Ereignisse reagieren:

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

Ich bin mir nicht sicher, welche Art von Variablen, die Sie wollen. Oben habe ich die lokalen Variablen x und y auf die Mauskoordinaten gesetzt.

Wenn Sie motion eine Klassenmethode machen, können Sie die Instanzattribute self.x und self.y auf die Mauskoordinaten setzen, auf die dann von anderen Klassenmethoden aus zugegriffen werden kann.

+0

Kann ich es als Var zurückgeben? – Kpfromer

+0

Nun, nichts empfängt den Rückgabewert des Callbacks, daher wäre es nicht sinnvoll, ihn von 'motion' zurückzugeben. – unutbu

+0

Kann ich das x, y als Var in der Funktion einstellen? – Kpfromer

16

Zu jedem Zeitpunkt können Sie die Methode winfo_pointerx und winfo_pointery verwenden, um die XY-Koordinaten relativ zum Stammfenster zu ermitteln. Zu konvertieren, die auf absolute Bildschirm Koordinaten Sie die winfo_pointerx oder winfo_pointery bekommen können, und von diesem subtrahieren den jeweiligen winfo_rootx oder winfo_rooty

Zum Beispiel:

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

Dies ist praktisch, wenn Sie die tab_id eines ttk :: notebook-Tabs abrufen möchten, auf das von einem Toplevel-Grab-Objekt geklickt wurde (das Notebook befindet sich außerhalb des Toplevel-Widgets). – Kumba

+1

Dies scheint die bessere Antwort zu sein. – Haboryme