在 Python 中访问 QML TextField 值
Posted
技术标签:
【中文标题】在 Python 中访问 QML TextField 值【英文标题】:Accessing QML TextField value in Python 【发布时间】: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)
【问题讨论】:
【参考方案1】:您需要调用对象的property()
方法来获取所需的属性。
在您的示例中,您需要调用:
print(foo.property("text"))
而不是print(foo.text)
请注意,如果属性不存在,property()
将返回 None
。
【讨论】:
以上是关于在 Python 中访问 QML TextField 值的主要内容,如果未能解决你的问题,请参考以下文章
使用 QAbstractListModel 从 python 访问 QML 中的列表元素
如何在 QML 中访问 C++ 类对象,而不是在 QML 中创建单独的对象?