【问题标题】:Showing Mouseposition with python用python显示鼠标位置
【发布时间】:2011-11-07 19:18:19
【问题描述】:

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

#! /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 中的一个事件来告诉我的脚本何时鼠标移动...

如何刷新我的鼠标位置?

【问题讨论】:

    标签: python linux tkinter xlib


    【解决方案1】:
    1. 使用root.after 定期调用update
    2. 使用strl = tk.StringVar()tk.Label(...,textvariable=strl) 允许更改标签文本。
    3. 致电strl.set() 更改标签文本。
    4. 添加了等于display.Display().screen().rootscreenroot 的默认值 到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()
    

    【讨论】:

    • 完美!有什么技巧可以让那个窗口保持在前台吗?
    • 可能有,但我不知道诀窍。它可能依赖于窗口管理器和/或操作系统。根据this 的说法,在 tk/tcl 中无法可靠地使用它。根据this,可以在Windows 中调用root.wm_attributes("-topmost", 1)
    • 好的。感谢您的出色帮助 :) 我正在使用 debian 6.0 和 gnome 顺便说一句。所以,如果你记得任何将窗口保持在顶部的技巧,请不要犹豫告诉我:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-02
    • 1970-01-01
    相关资源
    最近更新 更多