【问题标题】:Accessing QML TextField value in Python在 Python 中访问 QML TextField 值
【发布时间】:2015-12-29 15:13:19
【问题描述】:

我在 QML 中有一个带有两个 TextField 的表单。如何访问 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)

【问题讨论】:

    标签: python-3.x qml pyqt5


    【解决方案1】:

    您需要调用对象的property() 方法来获取所需的属性。

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

    print(foo.property("text"))
    

    而不是print(foo.text)

    请注意,如果属性不存在,property() 将返回 None

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-12
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      • 2023-02-20
      • 1970-01-01
      相关资源
      最近更新 更多