用python显示Mouseposition

时间:2011-11-07 19:18:19

标签: python linux tkinter xlib

我想跟踪我的鼠标位置并在一个小窗口中显示。 为此,我创建了这段代码:

#! /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 个答案:

答案 0 :(得分: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()将继续照常工作。

  5. 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()