PyQt6的文档指出
对 Qt 的资源系统的支持已被删除(即没有
pyrcc6
)。
鉴于此,应该如何为 PyQt6 应用程序提供资源?
当发现这一点时,PyQt 邮件列表上已经进行了一些讨论。
维护者不再对维护 pyrcc 感兴趣,因为他认为考虑到 python 已经使用多个文件,它不会提供任何主要好处。
最简单的解决方案可能是使用 QDirsetSearchPaths()
或addSearchPath()
.
不同之处在于资源将使用上述方法使用的前缀加载。
考虑到之前的情况:
icon = QtGui.QIcon(':/icons/myicon.png')
现在它会变成这样:
# somewhere at the beginning of your program
QtCore.QDir.addSearchPath('icons', 'path_to_icons/')
icon = QtGui.QIcon('icons:myicon.png')
共识似乎是应该使用现有的 python 工具而不是 pyrrc。因此,资源将直接存储在文件系统中(可能在存档文件中),然后使用importlib.resources (python >= 3.7)、pkg_resources或第三方解决方案(如importlib_resources)定位。这如何映射到 pyrcc 的现有用途可能是特定于应用程序的,因此需要进行一些实验来找到最佳方法。
有关如何使用这些设施的更多详细信息,请参阅:
当我开始使用 PyQt6 时,我发现缺少对 Qt6 资源的完全支持。尤其是在使用设计器并将图像用于按钮、标签等时。我尝试了 addSearchPath,但仍然必须编辑生成的 .py 模板。经过一些研究,我发现使用 importlab 是解决我问题的最佳方法。
我制作了简单的脚本,它使用 .qrc 文件并使用 importpath 生成 .py 模板。
例如改变:
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/icons/icon1.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
到:
icon = QtGui.QIcon()
with path("myPackage.resources.icons", "icon1.png") as f_path:
icon.addPixmap(QtGui.QPixmap(str(f_path)), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
这是 GitLab 存储库的链接:https ://github.com/domarm-comat/pyqt6rc
或者通过 pip 安装:
python3 -m pip install pyqt6rc