M1 Mac迁移PyQt5项目到PyQt6时qRegisterResourceData缺失如何解决
PyQt6 资源文件
qRegisterResourceData不存在报错解决方案 问题原因
PyQt6 对Qt6的资源系统接口做了重构,删除了原PyQt5中QtCore模块下直接暴露的qRegisterResourceData、qUnregisterResourceData两个全局方法,同时调整了资源注册的参数规则。你当前的pyjtt_res_rc.py是基于PyQt5的pyrcc5工具生成的,仅手动修改导入语句无法适配PyQt6的接口规则。
解决方案
方案1(推荐):用PyQt6配套工具重新生成资源文件
该方案可以避免手动修改代码的隐藏兼容问题,操作步骤如下:
- 找到生成
pyjtt_res_rc.py对应的原始Qt资源配置文件(后缀为.qrc,一般和项目源码放在一起) - 先安装PyQt6配套的资源编译工具:
pip3 install pyqt6 pyqt6-tools - M1芯片Mac注意:请使用原生arm64架构的Python 3.8+执行安装,不要用Rosetta 2转译的Python版本,避免工具适配问题
- 执行编译命令生成适配PyQt6的资源文件:
pyrcc6 你的资源文件名.qrc -o pyjtt_res_rc.py - 用新生成的资源文件替换旧文件即可正常启动应用
方案2:找不到原始.qrc文件时手动修改现有资源文件
如果丢失了原始的.qrc配置文件,可以直接修改现有pyjtt_res_rc.py的两个资源方法,调整接口调用规则:
# 原有导入语句保留 from PyQt6 import QtCore # 中间的qt_resource_data、qt_resource_struct、qt_resource_name变量定义全部保留不动 # 修改资源注册、注销方法如下 def qInitResources(): QtCore.QResource.registerResourceData(qt_resource_data, qt_resource_struct, qt_resource_name) def qCleanupResources(): QtCore.QResource.unregisterResourceData(qt_resource_data, qt_resource_struct, qt_resource_name) # 末尾的qInitResources()调用保留 qInitResources()
修改后保存文件重启应用即可解决报错。
内容的提问来源于stack exchange,提问作者forkintheass
相关产品推荐
相关产品推荐

