用Python显示鼠标位置
我想要追踪鼠标的位置,并在一个小窗口里显示出来。为此,我写了这段代码:
#! /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
- 使用
root.after
来定期调用update
。 - 用
strl = tk.StringVar()
和tk.Label(...,textvariable=strl)
来让标签的文字可以改变。 - 调用
strl.set()
来更改标签的文字。 - 给
screenroot
设置一个默认值,等于display.Display().screen().root
,这样在每次调用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()