如何从PyQt5资源文件中加载UI文件?
如何从PyQt5资源文件中加载UI文件?
嘿,我来帮你搞定这个加载UI文件的问题!你碰到的OSError: [Errno 22] Invalid argument,大概率是资源路径配置或者资源文件生成环节出了问题,咱们一步步来排查解决:
先检查你的.qrc资源文件配置
首先得确保你的资源描述文件(比如叫resources.qrc)里的路径和前缀是正确的。举个例子,如果你的加载路径是:/newPrefix/window.ui,那你的resources.qrc得写成这样:<RCC> <qresource prefix="newPrefix"> <file>window.ui</file> </qresource> </RCC>要是你把prefix设成了
/,那加载路径就直接用:/window.ui就行,别多写多余的前缀。重新生成资源文件的Python代码
别用旧的resources_rc.py了,咱们重新用pyrcc5命令生成一遍,确保资源文件是最新的:pyrcc5 resources.qrc -o resources_rc.py执行这个命令的时候要保证没有报错,而且生成的
resources_rc.py和你的主脚本在同一个目录里,或者能被Python找到。修正代码里的加载逻辑
导入resources_rc是对的,但加载路径必须和.qrc里的配置完全对应。另外,你也可以试试用QFile先打开资源再加载,这种方式有时候能规避路径解析的问题:import resources_rc from PyQt5 import QtWidgets, uic from PyQt5.QtCore import QFile class Ui(QtWidgets.QMainWindow): def __init__(self): super(Ui, self).__init__() # 先打开资源文件 ui_file = QFile(":/newPrefix/window.ui") ui_file.open(QFile.ReadOnly) # 加载UI uic.loadUi(ui_file, self) ui_file.close()额外排查小技巧
你可以加一行代码检查资源是否真的存在,方便定位问题:from PyQt5.QtCore import QFile if QFile.exists(":/newPrefix/window.ui"): print("资源文件找到了!") else: print("资源文件不存在,检查路径或资源生成!")
一般来说,按照上面的步骤调整后,这个错误就能解决啦,核心就是保证.qrc配置、生成的资源文件、代码里的路径三者完全匹配。
备注:内容来源于stack exchange,提问作者Adib
相关产品推荐
相关产品推荐

