python - PyQt 应用程序在 Linux 上卡住屏幕,在 Windows 上正常

标签 python linux windows pyqt pyperclip

我在 Windows 上编写 PyQt 应用程序已经有一段时间了,我想看看它是否能在 Linux 上正常运行。 GUI 应用程序基本上是一个科学工具包的外壳,旨在在 qtconsole/笔记本上使用。 Linux和Windows系统都基于Anaconda 3.5,并运行PyQt5。它在 Windows 上运行良好,但当我在 Linux 上运行时,弹出的 Qt 窗口只是卡住了窗口下方的图形(见下图)。命令行上根本没有显示任何错误,窗口只是弹出,根本不显示小部件。此外,当我尝试使用窗口顶部的 x 按钮关闭时,它会显示“应用程序不响应”对话框,我必须强制执行。

代码库非常大(对于这篇文章来说太大了),所以我实际上无法为这个问题放入代码示例(我还无法在这个程序之外重现该错误)。我可以说我确实从这个网站获得了一些适用于简单 GUI 程序的示例: https://github.com/Deusdies/pythonbo 。我的代码有很多小部件子类化,使用 pyqtgraph(来自 github 的最新版本)进行绘图,并且有很多 MDI 子窗口。

底层工具包的其他软件包包括:

  • numpy、numba、scipy、matplotlib
  • lmfit
  • pyexcel、pyexcel-xlsx
  • pyvisa、pyserial
  • pyperclip

当我尝试将任何 MDI 子窗口小部件作为单独的程序运行时,我遇到了与运行主程序相同的问题。

我想我很好奇是否有人以前遇到过这种情况,并且可以建议我应该调查一下可能出现的问题。

Frozen PyQt Application

最佳答案

一般答案是正在初始化 2 个 QApplication 事件循环。

问题代码出现在我一直使用的一个名为 pyperclip 的小模块中。首先导入它,然后我在 gui 代码的底部实例化我的 QApplication。

这在 Windows 上不是问题,因为 pyperclip 可以在某种程度上本地访问 Windows 剪贴板,但在 Linux 上它使用 QtClipboard。我的解决方案是编辑 pyperclip 代码来检测应用程序是否已经在运行,然后在导入 pyperclip 之前实例化我的 gui 应用程序

编辑代码

在 pyperclip 代码中,pyperclip.clipboards 模块,第 51 行我更改了这一行:

app = QApplication([])

对此:

app = QApplication.instance()
if app is None:
    app = QApplication([])

关于python - PyQt 应用程序在 Linux 上卡住屏幕,在 Windows 上正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38166420/

相关文章:

linux - 如何在超时 bash -c 命令中使用退出状态

windows - 实现 DebugExtensionProvideValue 会破坏 WinDbg 内部状态?

logging - Python 3.7 logging.setLoggerClass() 不是

Python:如何为多人游戏序列化对象?

python - 时间序列预测(最终使用 python)

python - 在尝试无效命令时,终端中的 Ctrl+C 生成 python 回溯

python - Django "Singleton model"存储用户设置

c - 结构填充

windows - 命令行输出不重定向到文件。

mysql - 为什么我的 MySQL 数据库在 Windows IIS 6 上崩溃并出现 VMWARE 错误 1784