访问 Python 中的 QML TextField 值

Accessing QML TextField value in Python

我有一个带有两个 TextField 的 QML 表单。如何访问在 Python 的字段中输入的值?

我正在使用 PyQt5.5 和 Python3.

import sys
from PyQt5.QtCore import QObject, QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQuick import QQuickView
from PyQt5.QtQml import QQmlApplicationEngine


if __name__ == '__main__':
    myApp = QApplication(sys.argv)

    engine = QQmlApplicationEngine()
    context = engine.rootContext()
    context.setContextProperty("main", engine)

    engine.load('basic.qml')

    win = engine.rootObjects()[0]
    button = win.findChild(QObject, "myButton")
    def myFunction():
        print("handler called")
        foo = win.findChild(QObject, "login")
        print(dir(foo))
        print(foo.text)
    button.clicked.connect(myFunction)
    win.show()

    sys.exit(myApp.exec_())

basic.qml

import QtQuick 2.3
import QtQuick.Controls 1.2

ApplicationWindow {
    width: 250; height: 175

    Column {
        spacing: 20
        TextField {
            objectName: "login"
            placeholderText: qsTr("Login")
            focus: true
        }

        TextField {
            placeholderText: qsTr("Password")
            echoMode: TextInput.Password
        }

        Button {
            signal messageRequired
            objectName: "myButton"
            text: "Login"
            onClicked: messageRequired()
        }
    }
}

控制台

Traceback (most recent call last):
  File "working.py", line 25, in myFunction
    print(foo.text)
AttributeError: 'QQuickItem' object has no attribute 'text'
fish: “python working.py” terminated by signal SIGABRT (Abort)

需要调用对象的property()方法才能得到想要的属性。

在您的示例中,您需要调用:

print(foo.property("text"))

而不是print(foo.text)

注意 property() returns None 如果 属性 不存在。