Отображение мышиного положения с питоном

1

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

#! /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, которое сообщает мой скрипт, когда мышь перемещается...

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

Теги:
tkinter
xlib

1 ответ

2
Лучший ответ
  1. Используйте root.after для периодического вызова update.
  2. Используйте strl = tk.StringVar() и tk.Label(...,textvariable=strl) чтобы разрешить изменение текста метки.
  3. Вызовите strl.set() чтобы изменить текст метки.
  4. Значение по умолчанию для screenroot равное display.Display().screen().root mousepos был добавлен в 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()
  • 0
    Отлично! Есть ли какая-нибудь хитрость, чтобы держать это окно на переднем плане?
  • 0
    Возможно, есть, но я не знаю хитрости. Это, вероятно, зависит от оконного менеджера и / или ОС. В соответствии с этим , нет надежного способа сделать это в рамках tk / tcl. В соответствии с этим это можно сделать в Windows, вызвав root.wm_attributes("-topmost", 1) .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню