2014-04-08 5 views
12

Есть ли способ получить позицию мыши и установить ее как var?Позиция мыши Python Tkinter

+0

Смотрите также: [Получить активное окно с помощью Python] (HTTP: //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() 

Я не уверен, какой переменной вы хотите. Выше, я устанавливаю локальные переменные x и y в координаты мыши.

Если вы сделаете метод класса, то вы можете установить атрибуты экземпляра self.x и self.y координатам мыши, которые затем могут быть доступны из других методов класса.

+0

Могу ли я вернуть его как var? – Kpfromer

+0

Ну, ничего не получает возвращаемое значение обратного вызова, поэтому было бы нецелесообразно возвращать его из 'motion'. – unutbu

+0

Могу ли я установить x, y как var в функции? – Kpfromer

16

В любой момент времени вы можете использовать метод 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() 
+0

Это удобно, если вы хотите извлечь tab_id вкладки ttk :: notebook, которая была нажата изнутри захвата toplevel (ноутбук является внешним по отношению к виджету верхнего уровня). – Kumba

+1

Кажется, это лучший ответ. – Haboryme

Смежные вопросы