【问题标题】:How can resources be provided in PyQt6 (which has no pyrcc)?PyQt6(没有pyrcc)如何提供资源?
【发布时间】:2021-05-11 22:00:55
【问题描述】:

documentation for PyQt6 声明

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

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

【问题讨论】:

    标签: python pyqt resources pyqt6 pyrcc


    【解决方案1】:

    发现这一点时,PyQt 邮件列表中已有 some discussion

    维护者不再对维护 pyrcc 感兴趣,因为他认为考虑到 python 已经使用多个文件,它不会提供任何主要好处。

    最简单的解决方案可能是使用 QDir setSearchPaths()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')
    

    【讨论】:

    • 谢谢,这是一个很好的解决方案,因为它需要对任何现有代码进行最少的修改。我想替代方案(使用通用资源系统)必须需要 QIcon(QPixmap.loadFromData(data)) 之类的东西 - 这不适用于矢量图像。
    • @biqqles 不一定:使用solutions provided by ekhumoro 仍然可以让您以正确的方式访问文件路径。看看答案中链接的整个邮件线程,IIRC 应该有一些关于此的消息。
    • 我再次浏览了该线程-您的意思是this message 带有指向qutebrowser 代码的链接吗?我想我仍然更喜欢addSearchPath 的简洁性,但在包装方面它可能不太健壮。两种解决方案都不错,但我只能选择一个!
    • 当您使用pyinstaller 创建exe 时,path_to_icons 的内容会自动加载到存档中(或者必须放在 exe 文件夹中,如果是的话)?
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      当我开始使用 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-04
        • 2018-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-16
        • 1970-01-01
        相关资源
        最近更新 更多