12

升级操作系统总是有风险的。您可能会遇到一些兼容性问题。我冒险将我的 macOS 从 Catalina 升级到最新的 Big Sur。在那之后,新操作系统中的显示看起来很漂亮,但是我所有的 PyQt5 应用程序都无法在这个新操作系统中启动。GUI 窗口没有像往常一样弹出,并且终端中没有显示错误消息。我花了一整天的时间试图弄清楚是什么导致了这个问题。我找到了解决方案,但以一种奇怪的方式让我感到困惑。

事实证明,在我在主脚本中添加以下三行后,应用程序恢复正常。

import matplotlib
import matplotlib.pyplot as plt

matplotlib.use('TkAgg')

在我看来,新操作系统与 Qt5Agg 后端存在一些兼容性问题。但奇怪的是,这个解决方案也适用于其中一个 Pyqt5 应用程序,我根本不使用 matplotlib。

我使用的 Python 版本是 3.8.4,我拥有的 PyQt5 版本是 5.15.1。

我希望有人可以向我解释使该解决方案起作用的幕后情况。我也希望这个临时解决方案可以帮助有同样问题的人。

4

7 回答 7

11

对 PyQt 邮件列表的回复指出,设置此 env var 有效:

QT_MAC_WANTS_LAYER=1

通过 找到关于 PyQt 库在 Mac OS Big Sur 中不起作用的任何解决方案吗?https://forums.macrumors.com/threads/pyqt5-and-big-sur.2260773/?post=29243620#post-29243620

于 2020-11-17T16:06:17.457 回答
4

我可以确认,matplotlib.use('TkAgg')其次是matplotlib.use('Qt5Agg')让事情对我有用,也是。我把它缩小到这个也可以工作:

# from matplotlib.backends import _tkagg
import _tkinter
import matplotlib.pyplot as plt
plt.figure()

所以这是关于编译_tkinter模块的东西。也许是输入挂钩?

于 2020-11-15T17:22:19.340 回答
2

正如@Eric 所说,只需在 PySide2 导入之前在代码的最开始添加以下内容:

import os
os.environ["QT_MAC_WANTS_LAYER"] = "1"

然后导入 PyQt5/PySide2。

于 2021-02-15T08:35:20.747 回答
1

我按照这里的解决方案降级到 PyQt 5.13。这解决了我的问题并允许我编译的应用程序在 Big Sur 上运行。

pip install PyQt5==5.13
于 2021-04-30T04:25:52.180 回答
0

对我来说,建议的解决方案在 pycharm 的断点上带来了崩溃......唯一有帮助的事情是: https ://forums.macrumors.com/threads/pyqt5-and-big-sur.2260773/ 一切都像魔术一样...... .希望QT能尽快修复它

于 2020-12-01T17:37:12.770 回答
0

我正在使用macOS Big Sur 版本 11.2.2

按照 Eric 的建议,在启动应用程序之前在终端中输入以下行:

export QT_MAC_WANTS_LAYER=1

这为我解决了这个问题!

于 2021-03-06T17:14:33.330 回答
0

将此添加到我的 python 程序对我有用

import os
os.environ["QT_MAC_WANTS_LAYER"] = "1"
于 2021-09-21T12:07:47.617 回答