4

PyQt6的文档指出

对 Qt 的资源系统的支持已被删除(即没有pyrcc6)。

鉴于此,应该如何为 PyQt6 应用程序提供资源?

4

3 回答 3

5

当发现这一点时,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')
于 2021-02-08T15:38:50.403 回答
3

共识似乎是应该使用现有的 python 工具而不是 pyrrc。因此,资源将直接存储在文件系统中(可能在存档文件中),然后使用importlib.resources (python >= 3.7)、pkg_resources或第三方解决方案(如importlib_resources)定位。这如何映射到 pyrcc 的现有用途可能是特定于应用程序的,因此需要进行一些实验来找到最佳方法。

有关如何使用这些设施的更多详细信息,请参阅:

于 2021-02-08T15:42:01.397 回答
0

当我开始使用 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
于 2022-01-08T16:28:32.660 回答