Есть ли способ получить позицию мыши и установить ее как var?
Позиция мыши Python Tkinter
Ответ 1
Вы можете настроить обратный вызов для реагирования на события <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
в координаты мыши.
Если вы сделаете motion
метод класса, вы можете установить атрибуты экземпляра self.x
и self.y
в координаты мыши, которые затем могут быть доступны из других методов класса.
Ответ 2
В любой момент времени вы можете использовать метод 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()
Ответ 3
Я хотел бы улучшить ответ Брайана, поскольку он работает только при наличии одного монитора, но если у вас несколько мониторов, он всегда будет использовать ваши координаты относительно вашего основного монитора. чтобы найти его относительно обоих мониторов и получить точное положение, используйте vroot
вместо root
, вот так
root = tk.Tk()
...
x = root.winfo_pointerx()
y = root.winfo_pointery()
abs_coord_x = root.winfo_pointerx() - root.winfo_vrootx()
abs_coord_y = root.winfo_pointery() - root.winfo_vrooty()
Ответ 4
Лично я предпочитаю использовать pyautogui
даже в сочетании с Tkinter. Он не ограничивается приложением Tkinter, но работает на всем экране, даже в конфигурации с двумя экранами.
import pyautogui
x, y = pyautogui.position()
Если вы хотите сохранить различные позиции, добавьте событие по нажатию.
Я знаю, оригинальный вопрос о Tkinter.