Зарегистрируйте унаследованный мета-объект QObject в QJSEngine

Я хотел бы унаследовать класс и зарегистрировать мета-объект унаследованного класса в экземпляре QJSEngine, чтобы я мог вызвать let instance = new TrialObject();в JavaScript. Вот мой код:

      from PyQt6.QtQml import QJSEngine
from PyQt6.QtCore import QCoreApplication, QObject


JS = """
(function() {
    let a = new TrialObject();
    return a;
})();
"""


class AttributeHandler(QObject):
    def __init__(self, parent=None):
        QObject.__init__(self, parent)


class Main:
    def __init__(self):

        self.jsHandler = QJSEngine()
        self.jsHandler.globalObject().setProperty("TrialObject", self.jsHandler.newQMetaObject(QObject.staticMetaObject))

        r = self.jsHandler.evaluate(JS)

        print(r.toString())


if __name__ == "__main__":
    app = QCoreApplication([])
    main = Main()
    app.exec()

Когда (как указано выше) я использую в качестве TialObject, JavaScript работает нормально и возвращает обратно в Python. Следовательно, он активен и работает. Но когда я пытаюсь заменить QObject.staticMetaObject с участием AttributeHandler.staticMetaObject, Я получаю сообщение об ошибке:

TypeError: AttributeHandler has no invokable constructor

... показывая, что AttributeHandler не вызывается. Под "вызываемым" я подразумеваю, что JavaScript может создать новый экземпляр класса. TrialObject, который я хотел бы сделать классом, созданным на Python и наследуемым.

Как я могу зарегистрировать унаследованный QObjectмета-объект для QJSEngine так что это вызываемый IE, новый экземпляр может быть создан в JavaScript?

(PyQt6, Python 3.9, Windows 10)

0 ответов

Другие вопросы по тегам