Importación de QML desde un archivo de recursos (QRC) con PySide2
Nov 24 2020
He agregado un componente QML simple ("qml / MyButton") a mi archivo "resource.qrc":
<RCC>
<qresource prefix="/">
<file>qml/MyButton.qml</file>
</qresource>
</RCC>
Luego compilé el QRC en un módulo de Python con:
pyside2-rcc -o resource.py resource.qrc
Luego importé resource.py en main.py:
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_())
Y llamado componente MyButton en main.qml:
import QtQuick 2.13
import QtQuick.Window 2.13
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
MyButton {
}
}
Este es "qml / MyButton.qml":
import QtQuick 2.0
import QtQuick.Controls 2.13
Button {
text: 'Click Me'
}
Cuando ejecuto el programa, aparece el error "MyButton no es un tipo". Quiero usar el componente QML usando el archivo de recursos generado por Python. No sé qué estoy haciendo mal.
Respuestas
1 eyllanesc Nov 24 2020 at 06:54
Importación automática si el .qml está al lado del archivo principal, pero en su caso, MyButton.qml no está al lado del main.qml, por lo que el paquete debe importarse:
import QtQuick 2.13
import QtQuick.Window 2.13
import "qrc:/qml"
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
MyButton {
}
}