Зарегистрируйте унаследованный мета-объект 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)