问题描述
我有一个 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): 参数 2 有意外的类型 'str'
我应该怎么做才能通过这个问题?
解决方法
PyQt 上的资源文件实际上是带有 base64 编码数据的 python 脚本。
移植到较新的系统(python 3 和 Qt5)时需要正确更新这些文件。
通常,可以通过再次调用 pyrcc
命令(如果安装了两个 Qt 版本,则为 pyrcc5
或 pyrcc5.exe
)来完成,但它们可以手动移植,考虑以下几个方面:
- import 语句显然已修改为
PyQt5
; - 所有变量(
qt_resource_data
和qt_resource_name
)都是 bytes literals 并且需要b'...'
前缀;
from PyQt5 import QtCore
qt_resource_data = b"\
-- raw data --
"
qt_resource_name = b"\
-- raw data --
"