2014-04-08 95 views
12

마우스의 위치를 ​​얻고 var로 설정할 방법이 있습니까?마우스 위치 Python Tkinter

+0

도 참조 : (HTTP [파이썬을 사용하여 활성 창을 받기] 절대 화면이 변환하려면 당신이 winfo_pointerx 또는 winfo_pointery을 얻고, 그에서 예를 들어 각각의 winfo_rootx 또는 winfo_rooty

을 뺄 수 있습니다 좌표 : //stackoverflow.com/q/10266281/562769) –

답변

15

당신은 <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() 

나는 당신이 원하는 변수의 종류를 모르겠어요. 위의 경우 로컬 변수 xy을 마우스 좌표에 설정합니다.

motion을 클래스 메서드로 만들면 self.xself.y을 마우스 좌표에 설정할 수 있습니다. 그러면 다른 클래스 메서드에서 액세스 할 수 있습니다.

+0

var로 반환 할 수 있습니까? – Kpfromer

+0

글쎄, 아무것도 콜백의 반환 값을받지 않습니다, 그래서 그것은'모션'에서 반환하는 것이 유용하지 않을 것입니다. – unutbu

+0

함수에서 x, y를 var로 설정할 수 있습니까? – Kpfromer

16

언제든지 방법 winfo_pointerxwinfo_pointery을 사용하여 루트 창에 상대적인 x, y 좌표를 얻을 수 있습니다.

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

톱 레벨 잡기의 내부에서 클릭 한 ttk :: notebook 탭의 tab_id를 가져오고 싶을 때 유용합니다 (노트북이 최상위 위젯의 외부에 있음). – Kumba

+1

이것은 더 나은 대답 인 것 같습니다. – Haboryme