我想继承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.staticMetaObject
as 时TrialObject
,JavaScript 运行良好,并返回QObject
给 Python。因此QObject
是可调用和工作的。但是当我尝试用 替换QObject.staticMetaObject
时AttributeHandler.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()
,但这也没有预期的效果。