【问题标题】:PyQt Application Frozen Screen on Linux, fine on WindowsLinux上的PyQt应用程序冻结屏幕,在Windows上很好
【发布时间】:2016-07-03 03:15:51
【问题描述】:

我在 Windows 上编写 PyQt 应用程序已有一段时间了,我想看看它是否能在 Linux 上正常运行。 gui 应用程序基本上是用于 qtconsole/notebook 的科学工具包的外壳。 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 子窗口小部件作为单独的程序运行时,我遇到了与运行主程序相同的问题。

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

【问题讨论】:

  • 请发送MCVE。从您的程序开始,并删除所有不会导致问题的代码,直到您留下 minimal 示例。您很有可能以这种方式自己发现问题(尤其是因为小示例似乎有效,因此问题可能出在您的程序中,而不是在您的安装中)。如果没有,请发布您的 MCVE,我们可以更好地查看问题。

标签: python linux windows pyqt pyperclip


【解决方案1】:

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

【讨论】:

  • 我也有同样的问题。您写道:“我的解决方案是编辑 pyperclip 代码以检测应用程序是否已在运行”。很遗憾你没有为此发布代码 sn-p... :(
  • 好吧,这也是我所做的,一旦我发现如何去做! pyperclip 在这里使用app 作为一个危险的全局变量,我在这里将它重命名为cbApp。 (顺便说一句,我发现纯粹的 OOI 即使没有任何代码更改,如果您以 root 身份运行 pyperclip 应用程序,它也不会挂起 --- 奇怪!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 2017-02-13
  • 2022-12-22
相关资源
最近更新 更多