我在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子窗口。
底层工具包的其他包包括:
当我尝试将任何MDI子窗口小部件作为单个程序运行时,我遇到与运行主程序相同的问题。
我想我很好奇以前是否有人遇到过这种情况,并且可以建议我应该调查的问题,看看问题可能是什么。
答案 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([])