python - 如何在QML文件中使用QRC文件?

标签 python qt qml pyside6

我有一个一直在开发的应用程序,最近我听说了 qml 和 qrc 文件系统,在此之前,我只使用 PySide6 和 qss。所以我一直在使用 qml 为这个应用程序制作 GUI,但我遇到了困难。我想给一个按钮一个图标,所以在我的 qrc 文件中我写了这个:

<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
    <file>menu_icons/menu.png</file>
</qresource>
</RCC>

并为我的按钮提供我这样写的图标:

Button {
            id: "menu_toggle_button"
            
            text: qsTr("Menu")

            flat: true
            width: menu.width

            font.family: "Times New Roman"
            font.pointSize: 20

            icon.source: ":/menu_icons/menu.png"
}

但这似乎不起作用,当我运行代码时,我收到此消息:

file:///C:/Users/User/AppData/Local/Programs/Python/Python39/lib/site-packages/PySide6/qml/QtQuick/Controls/Material/Button.qml: QML IconImage: Cannot open: file:///C:/Users/User/AppData/Local/Programs/Python/Python39/lib/site-packages/PySide6/qml/QtQuick/Controls/Material/:/menu_icons/menu.png

这是我的Python代码:

import sys

from PySide6.QtGui import QGuiApplication
from PySide6.QtQml import QQmlApplicationEngine

app = QGuiApplication(sys.argv)

engine = QQmlApplicationEngine()
engine.quit.connect(app.quit)
engine.load('main.qml')

sys.exit(app.exec())

我尝试将 icon.source: ":/menu_icons/menu.png" 更改为 icon.source: "qrc:/menu_icons/menu.png"但这只是将错误消息更改为包含 qrc:/ 而不仅仅是 :/

那么我做错了什么?

最佳答案

您必须执行以下操作:

  1. 将 .qrc 转换为 .py:pyside6-rcc resources.qrc -o resources_rc.py

  2. import resources_rc添加到main.py

  3. 使用完整路径:icon.source: "qrc:/menu_icons/menu.png"

关于python - 如何在QML文件中使用QRC文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69311344/

相关文章:

python - pandas 数据框中的高级滚动平均值(适用条件)

python - pandas多索引选择: How to select subset of a dataframe?

c++ - 在不调用 QApplication::exec() 的情况下显示小部件的正确方法是什么?

c++ - Qt Designer 生成 C++ 代码

qt - 根据属性(property)选择委托(delegate)

Python 3 : Converting UTF-8 unicode Hindi Literal to Unicode

python - 如何使布局成为 QMainWindow 的主要小部件

c++ - Qt & Prepending 一个 QMenu 到另一个 QMenu

c++ - 如何在使用 QQmlApplicationEngine 时从 C++ 访问我的 Window 对象属性?

webview - QML : How to change the user-agent of a request in WebView element