Linux上的PyQt应用程序冻结屏幕,在Windows上很好

时间:2016-07-03 03:15:52

标签: python linux windows pyqt pyperclip

我在Windows上编写PyQt应用程序已有一段时间了,我想知道它是否可以在Linux上正常运行。 gui应用程序基本上是一个用于qtconsole / notebook上的科学工具包的shell。 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

1 个答案:

答案 0 :(得分:2)

一般的答案是,正在初始化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([])