使用tkin的windows上的全局热键

2024-06-08 00:37:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望pythonttkinter应用程序注册一个全局热键(即使应用程序没有焦点也会触发)。我找到了一些碎片,但我找不到把它们组装起来的方法。。。在

基本上,我可以注册热键(通过调用windows API RegisterHotKey),但它会向处于Tkinter mainloop管理下的根窗口发送“WM_hotkey”消息,我无法找到绑定它的方法。。。在

在tk.协议()函数似乎就在那里,但是这个消息似乎没有被理解(我找不到一个完整的已识别消息的列表)。。。在

这里有一个非工作代码示例,我想打印一条消息时,“WIN-F3”被按下。。。在

import Tkinter
import ctypes
import win32con

class App(Tkinter.Tk): 
    def __init__(self):
        Tkinter.Tk.__init__(self)

        user32 = ctypes.windll.user32
        if user32.RegisterHotKey (None, 1, win32con.MOD_WIN , win32con.VK_F3):
            print("hotkey registered")
        else:
            print("Cannot register hotkey")

        self.protocol("WM_HOTKEY", self.hotkey_received)

    def hotkey_received(self):
        print("hotkey")

if __name__ == "__main__":
    app = App()
    app.mainloop()
    try:
        app.destroy()
    except:
        pass    

谢谢

编辑-----------------------------------

好吧,我找到了一种方法,把整个windows循环推到一个独立于tkinter主循环的线程中。在

但这并不是一个干净的解决方案,因为我实际上有两个循环,用于与操作系统进行基本相同的交互,它需要一个消息队列来与应用程序交互,但它确实做到了。。。 如果有人有更好的选择,我会很高兴看到。。。在


Tags: 方法importselfapp应用程序消息tkinterwindows

热门问题