Отображение мышиного положения с питоном - PullRequest
1 голос
/ 07 ноября 2011

Я хочу отследить свою позицию мыши и показать это в крошечном окне.Для этого я создал этот фрагмент кода:

#! /usr/bin/python

from Tkinter import *
from Xlib import display

def mousepos():
    data = display.Display().screen().root.query_pointer()._data
    return data["root_x"], data["root_y"]

root = Tk()
strl = "mouse at {0}".format(mousepos())
lab = Label(root,text=strl)
lab.pack()
root.title("Mouseposition")

root.mainloop()

Этот небольшой скрипт показывает положение мыши при запуске, но не обновляет ее при движении мыши.Я не отстаю от этого (я говорил, что я новичок в python?).Я думаю, что мне нужно использовать событие из Xlib, которое сообщает моему сценарию, когда мышь движется ...

Как мне обновить мою позицию мыши?

1 Ответ

2 голосов
/ 07 ноября 2011
  1. Используйте root.after для периодического вызова update.
  2. Используйте strl = tk.StringVar() и tk.Label(...,textvariable=strl) для изменения текста метки.
  3. Вызов strl.set() для изменения текста метки.
  4. Значение по умолчанию для screenroot, равное display.Display().screen().root, было добавлено к mousepos, так что большая часть этой длинной цепочки вызовов функцийне повторяются каждый раз, когда вызывается mousepos.Вызов mousepos() без аргументов продолжит работать как обычно.

import Tkinter as tk
import Xlib.display as display

def mousepos(screenroot=display.Display().screen().root):
    pointer = screenroot.query_pointer()
    data = pointer._data
    return data["root_x"], data["root_y"]

def update():
    strl.set("mouse at {0}".format(mousepos()))
    root.after(100, update)

root = tk.Tk()
strl = tk.StringVar()
lab = tk.Label(root,textvariable=strl)
lab.pack()
root.after(100, update)
root.title("Mouseposition")
root.mainloop()
...