PySide2を使用してリソース(QRC)ファイルからQMLをインポートする

Nov 24 2020

簡単なQMLコンポーネント( "qml / MyButton")を "resource.qrc"ファイルに追加しました。

<RCC>
<qresource prefix="/">
    <file>qml/MyButton.qml</file>
</qresource>
</RCC>

次に、QRCをPythonモジュールにコンパイルしました。

pyside2-rcc -o resource.py resource.qrc

次に、resource.pyを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_())

そして、main.qmlでMyButtonコンポーネントと呼ばれます。

import QtQuick 2.13
import QtQuick.Window 2.13

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    MyButton {

    }
}

これは「qml / MyButton.qml」です。

import QtQuick 2.0
import QtQuick.Controls 2.13

Button {
    text: 'Click Me'
}

プログラムを実行すると、「MyButtonはタイプではありません」というエラーが表示されます。Pythonで生成されたリソースファイルを使用してQMLコンポーネントを使用したいと思います。何が間違っているのかわかりません。

回答

1 eyllanesc Nov 24 2020 at 06:54

.qmlがメインファイルの隣にあるが、MyButton.qmlがmain.qmlの隣にない場合は自動インポートなので、パッケージをインポートする必要があります。

import QtQuick 2.13
import QtQuick.Window 2.13

import "qrc:/qml"

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    MyButton {
    }
}