【问题标题】:Get return value in QML from Python method从 Python 方法获取 QML 中的返回值
【发布时间】:2016-07-12 09:46:18
【问题描述】:

我正在尝试从 QML 调用 Python 方法并使用返回值。

QML 从 Python 方法接收未定义的数据。

当传回 Python 时,它只是一个空字符串。

import sys
from PyQt5.QtCore import QObject, pyqtSlot
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQml import QQmlApplicationEngine


class InPython(QObject):
    @pyqtSlot(str, )
    def login(self, Login):
        print(Login)
        return "a"


if __name__ == "__main__":
    app = QApplication(sys.argv)
    engine = QQmlApplicationEngine()
    context = engine.rootContext()
    context.setContextProperty("main", engine)
    engine.load('Main.qml')
    win = engine.rootObjects()[0]

    inPython = InPython()
    context.setContextProperty("loginManger", inPython)

    win.show()
    sys.exit(app.exec_())

Main.qml

import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Layouts 1.0

ApplicationWindow {
    width: 800;
    height: 600;

    ColumnLayout {
        anchors.horizontalCenter: parent.horizontalCenter
        anchors.verticalCenter: parent.verticalCenter
        anchors.margins: 3
        spacing: 3
        Column {
            spacing: 20
            anchors.horizontalCenter: parent.horizontalCenter

            TextField {
                id: login
                objectName: "login"
                placeholderText: qsTr("Login")
                focus: true
                Layout.fillWidth: true
                onAccepted: {
                    btnSubmit.clicked()
                }
            }

            Button {
                id: btnSubmit
                objectName: "btnSubmit"
                text: qsTr("Login")
                Layout.fillWidth: true
                onClicked: {
                    var a = loginManger.login(login.text);
                    console.log(a);
                    loginManger.login(a); // Python recieves ''
                    if (a === "a"){
                        login.text = "SUCCESS"
                    }
                }
            }
        }
    }
}

【问题讨论】:

    标签: python qt qml pyqt5


    【解决方案1】:

    你还需要告诉你从你的方法返回了什么(注意 pyqtslot 装饰器中的result

    class InPython(QObject):
        @pyqtSlot(str, result=str)  # also works: @pyqtSlot(QVariant, result=QVariant)
        def login(self, Login):
            print(Login)
            return "a"
    

    result – 结果的类型,可以是 Python 类型对象或 指定 C++ 类型的字符串。这只能作为关键字给出 论据。

    Documentation about @pyqtslot(和result 参数)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      • 2019-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      • 2023-03-04
      相关资源
      最近更新 更多