【发布时间】:2020-06-28 08:03:56
【问题描述】:
我试图通过按下全局热键在 wxPython 框架上的 show() 和 hide() 之间切换。以下代码有两个障碍。
首先,我无法将“self”传递给keyboard.GlobalHotKeys 函数。据我所知,这是一个范围问题,但我该如何解决?
其次,with keyboard.GlobalHotKeys() as x 会阻止其余代码运行。阅读pynput documentation 我觉得它是非阻塞的。
此处提供的代码是一个示例。在我的真实程序中,有一个托盘图标表示程序正在运行。我想要几个热键,但在实施时遇到了这个问题。我知道这个问题可能与线程有关。我一直在尝试阅读 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()
【问题讨论】: