无法连接到Python发出的QML中的信号

2024-09-30 18:14:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用Python创建的QQuickItem类:

class MyPage(QQuickItem):
    def __init__(self, parent=None) -> None:
        super().__init__(parent)
        error_encountered = Signal(str)

    @QtCore.Slot(QUrl, result=None)
    def load_report(self, file_path: QUrl) -> None:
        print(f"Called with: {file_path}")
        self.error_encountered.emit("Uh oh!")

上述类别注册为:

qmlRegisterType(MyPage, "MyPage", 1, 0, "MyPage")

我的QML看起来像:

MyPage {
    signal errorEncountered(string text)
    Component.onCompleted: error_encountered.connect(errorEncountered)
    onErrorEncountered: console.log(text)
}

但是,我得到以下错误:

qrc:/qml/main.qml:93: ReferenceError: error_encountered is not defined

PySt2连接到QML到源代码的信号模式在Python中有点不同于C++,而且我很难找出它。在C++中,我会有一个信号定义为^ {< CD4}},在QML中,我可以简单地做^ {CD5}}。p>

Tags: pathtextselfnoneinitdeferrorqml
1条回答
网友
1楼 · 发布于 2024-09-30 18:14:03

信号被声明为类的属性,也就是说,它们不应该在类的任何方法中创建。解决办法是:

class MyPage(QQuickItem):
    error_encountered = Signal(str) # < -

    def __init__(self, parent=None) -> None:
        super().__init__(parent)

    @QtCore.Slot(QUrl, result=None)
    def load_report(self, file_path: QUrl) -> None:
        print(f"Called with: {file_path}")
        self.error_encountered.emit("Uh oh!")

相关问题 更多 >