0

我想继承QObject该类,并将继承类的元对象注册到一个 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()

当(如上所述),我使用QObject.staticMetaObjectas 时TrialObject,JavaScript 运行良好,并返回QObject给 Python。因此QObject是可调用和工作的。但是当我尝试用 替换QObject.staticMetaObjectAttributeHandler.staticMetaObject,我得到了错误:

TypeError: AttributeHandler has no invokable constructor

...表明 AttributeHandler 不可调用。“可调用”是指 JavaScript 可以创建 class 的新实例TrialObject,我希望它是一个在 Python 中创建的类,并继承QObject.

如何注册一个继承QObject的元对象QJSEngine,使其可调用 IE 一个新实例可以在 JavaScript 中实例化?

(PyQt6、Python 3.9、Windows 10)


编辑 1

运行AttributeHandler.staticMetaObject.constructorCount()返回0,而对于正常情况QObject,它返回2,所以我认为问题在于构造函数实际上被元对象系统识别。Q_INVOKABLE中不存在PyQt,所以我尝试__init__用 with装饰pyqtSlot(),但这也没有预期的效果。

4

0 回答 0