Importieren von QML aus einer Ressourcendatei (QRC) mit PySide2
Ich habe meiner Datei "resource.qrc" eine einfache QML-Komponente ("qml / MyButton") hinzugefügt:
<RCC>
<qresource prefix="/">
<file>qml/MyButton.qml</file>
</qresource>
</RCC>
Ich habe dann den QRC zu einem Python-Modul kompiliert mit:
pyside2-rcc -o resource.py resource.qrc
Dann habe ich resource.py in main.py importiert:
import sys
import os
from PySide2.QtGui import QGuiApplication
from PySide2.QtQml import QQmlApplicationEngine
import resource
if __name__ == "__main__":
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.load(os.path.join(os.path.dirname(__file__), "main.qml"))
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec_())
Und genannt MyButton-Komponente in main.qml:
import QtQuick 2.13
import QtQuick.Window 2.13
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
MyButton {
}
}
Dies ist "qml / MyButton.qml":
import QtQuick 2.0
import QtQuick.Controls 2.13
Button {
text: 'Click Me'
}
Wenn ich das Programm starte, erhalte ich die Fehlermeldung, dass "MyButton kein Typ ist". Ich möchte die QML-Komponente mithilfe der von Python generierten Ressourcendatei verwenden. Ich weiß nicht, was ich falsch mache.
Antworten
Automatischer Import, wenn sich die .qml neben der Hauptdatei befindet, in Ihrem Fall jedoch MyButton.qml nicht neben der main.qml, sodass das Paket importiert werden muss:
import QtQuick 2.13
import QtQuick.Window 2.13
import "qrc:/qml"
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
MyButton {
}
}