首页 文章

将Tkinter mainloop与另一个事件监听器相结合

提问于
浏览
1

我正在尝试构建一个程序来侦听某些键组合,然后在Tkinter窗口中向用户显示信息 . 要做到这一点,我正在使用类似的键盘 Logger (本例简化):

from pyHook import HookManager
from pythoncom import PumpMessages
import Tkinter as tk

def on_keyboard_event(event):
    label.config(text=event.Key)
    root.update()
    return True

hm = HookManager()
hm.KeyDown = on_keyboard_event
hm.HookKeyboard()
root = tk.Tk()
label = tk.Label(root, text='Hello world')
label.pack()
PumpMessages()

正如预期的那样,窗口弹出并向用户显示他们按下的键 . 但是,我希望通过与Tkinter窗口交互来集成功能以显示其他消息,例如通过按下按钮 . 但是,似乎我需要Tkinter的mainloop来做这个,我无法弄清楚如何与PumpMessages()一起运行,因为它也会停止类似于mainloop()的代码 .

我尝试在root.after()中运行root.mainloop(),我尝试重新创建root.mainloop,如下所示:

def mainloop():
    root.update()
    root.after(50, mainloop)

然后在PumpMessages之前运行它,但这些解决方案都不起作用 . 它似乎也不能在一个线程中运行PumpMessages或root.mainloop,尽管我可能无法正确执行它 . 如果使用Tkinter是不可能的,那么我是否可以使用可以使用的备用Python GUI?

1 回答

  • 0

    您不需要创建一个函数来使用 mainloop() ,只需将 mainloop() 放在代码的底部即可 . 如果你想延迟它,使用 root.after(milliseconds, function)

    另外,记得在 PumpMessages() 之前放 mainloop()

    例如

    def mainloopfunction():
        mainloop()
    
    root.after(5000, mainloopfunction)
    

    希望我能帮忙!

相关问题