不要在已编译的 exe 上工作关键侦听器

Posted

技术标签:

【中文标题】不要在已编译的 exe 上工作关键侦听器【英文标题】:Don't working key listener on compiled exe 【发布时间】:2020-04-06 08:12:18 【问题描述】:

我用 Qt.Key 将程序隐藏在托盘中:

def keyPressEvent(self, e):
        if e.key() == QtCore.Qt.Key_Escape:
            self.hide()

并在使用“结束”键最小化后激活显示窗口的键盘侦听器。

class InactiveHotKey(Thread):

    def __init__(self):
        super().__init__()

    def run(self):
        from pynput.keyboard import Key, Listener

        def on_release(key):
            if key == Key.end:
                w.showNormal()
                return False

        with Listener(on_release=on_release) as listener:
            listener.join()

在 Pycharm 中一切正常,但在使用 pyinstaller(--onefile --icon=main_icon.ico --noconsole main.py) 'w.showNormal()' 编译程序后不起作用。

【问题讨论】:

不工作,究竟如何? 按键程序仍然隐藏。但仍在工作。 【参考方案1】:

嗯,问题解决了。我忘了在主要的 python 环境中安装 pynput,它只在项目 venv 中工作。

【讨论】:

使用这样的导入可能会导致像您这样的意外问题;您可能应该像往常一样将它放在开头,但在 try/except 内,并且只有在导入成功时才最终启动密钥侦听器。

以上是关于不要在已编译的 exe 上工作关键侦听器的主要内容,如果未能解决你的问题,请参考以下文章

关键监听器工作不正常

Click事件监听器仅在第二次工作

在已编译的 exe 中编辑字符串 [关闭]

如何在关键侦听器范围之外使用布尔值

Javascript 对象中属性值更改的侦听器

如何实现关键监听器?