繁体   English   中英

Pynput:检测全局热键块 wxPython 框架

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM