从 PyQt4 迁移到 PyQt5 时面临的问题

Posted

技术标签:

【中文标题】从 PyQt4 迁移到 PyQt5 时面临的问题【英文标题】:Issue faced while migrating from PyQt4 to PyQt5 【发布时间】:2021-02-02 13:25:34 【问题描述】:

我有一个非常大的 GUI 应用程序。我在 Python 2.7 中有它。由于 Python 2 不再更新,我使用 2to3 模块将我的应用程序转换为 Python 3.8。我正面临这个问题,不知道如何解决它。我提到了一些类似的问题,但没有得到任何结果。我有以下错误:

QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) TypeError: qRegisterResourceData(int, bytes, bytes, bytes): 参数 2 具有意外类型 'str'

我应该怎么做才能通过这个问题?

【问题讨论】:

你重新生成资源文件了吗? 对不起。我没有。我对此很陌生。我该怎么做? 与您创建它的方式相同。您可能使用过pyrcc resource.qrc -o resource.py。如果您同时拥有 PyQt4 和 PyQt5,则应该是 pyrcc5(或 pyrcc5.exe)。 【参考方案1】:

PyQt 上的资源文件实际上是带有 base64 编码数据的 python 脚本。

当移植到较新的系统(python 3 和 Qt5)时,需要正确更新这些文件。

一般情况下,可以通过再次调用pyrcc 命令来完成(pyrcc5pyrcc5.exe,如果两个 Qt 版本都安装了),但它们可以手动移植,考虑以下方面:

import语句明显修改为PyQt5; 所有变量(qt_resource_dataqt_resource_name)都是bytes literals 并且需要b'...' 前缀;

from PyQt5 import QtCore

qt_resource_data = b"\
    -- raw data --
"

qt_resource_name = b"\
    -- raw data --
"

【讨论】:

我会赞成你的答案,但因为我的声誉点而不能。非常感谢! @Sash7 别担心,重要的是它已被标记为已接受。在 SO 上继续关注和互动,您将轻松获得more reputation。

以上是关于从 PyQt4 迁移到 PyQt5 时面临的问题的主要内容,如果未能解决你的问题,请参考以下文章

从 PyQt5 转换为 PyQt4 [关闭]

PyQt4 到 PyQt5 怎么样?

从命令提示符更新 Python 版本并将 PyQt4 转换为 PyQt5

pyqt4 pyqt5 哪个好用

PyQt4 代码在 PyQt5 (QHeaderView) 上不起作用

PyQt5 导入 QtGui 失败