我希望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主循环的线程中。在
但这并不是一个干净的解决方案,因为我实际上有两个循环,用于与操作系统进行基本相同的交互,它需要一个消息队列来与应用程序交互,但它确实做到了。。。 如果有人有更好的选择,我会很高兴看到。。。在
有点晚了,但可能对某人有帮助。。。读this answer。在
相关问题 更多 >
编程相关推荐