[英]Pynput: detecting global hotkey blocks wxPython frame
我试图通过按全局热键在 wxPython 框架上的show()
和hide()
之间切换。 以下代码有两个障碍。
首先,我无法将“ self
”传递给keyboard.GlobalHotKeys
。GlobalHotKeys function。 据我所知,这是一个 scope 问题,但我该如何解决?
其次, with keyboard.GlobalHotKeys() as x
阻止了代码的 rest 运行。 阅读pynput 文档后,我觉得它是非阻塞的。
此处提供的代码是一个示例。 在我的真实程序中,有一个托盘图标表示程序正在运行。 我想要几个热键,但在实施时遇到了这个问题。 我知道这个问题可能与线程有关。 我一直在尝试阅读 wxPython 的线程处理,但目前它对我来说太先进了。
谢谢你。
import wx
from pynput import keyboard
class Test(wx.Frame):
def __init__(self, parent):
super().__init__(parent, title="title")
def show_panel(self):
if self.Show() == True:
self.Show()
else:
self.Hide()
def h_show(self):
print('<ctrl>+s pressed')
self.show_panel
with keyboard.GlobalHotKeys({'<ctrl>+s': h_show}) as x:
x.join()
def main():
app = wx.App()
ex = Test(None)
app.MainLoop()
if __name__ == '__main__':
main()
所以,我第四次重做一切,并意识到我做错了什么。 这并不能回答我的问题,但它确实可以满足我的要求。
import wx
from pynput import keyboard
class Test(wx.Frame):
def __init__(self, parent):
super().__init__(parent, title="title")
def main():
app = wx.App()
ex = Test(None)
def show_panel():
if ex.Show() == True:
ex.Show()
else:
ex.Hide()
listener = keyboard.GlobalHotKeys({'<ctrl>+s': show_panel})
listener.start()
app.MainLoop()
if __name__ == '__main__':
main()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.