2016-03-24 32 views
0

QMLからPythonメソッドを呼び出して戻り値を使用しようとしています。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" 
        } 
       } 
      } 
     } 
    } 
} 

答えて

1
また、あなたは(あなたのメソッドから戻るpyqtslotデコレータで resultに注意を払っているものを伝える必要があり

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

結果 - 結果の型であり、Python型オブジェクトまたはC++型を指定する 文字列である可能性があります。 nylyはキーワード の引数として与えられます。

Documentation about @pyqtslot(及びresultパラメータ)

関連する問題