我在 QML 中有一个列表并将其显示在 listView 对象中。按下按钮时,我需要从 python 访问这些数据。在 Python 中,我创建了一个 QStringListModel 对象,并使用 setContextProperty 将它绑定到我在 QML 中的 listModel。我可以看到在 QML 中按预期创建和显示列表,但是当我想从 python 访问数据时,列表是空的。这是代码:
质量管理体系:
import QtQuick 2.0
import QtQuick.Controls 2.3
Rectangle{
id: root
width:800
height:600
ListView {
id: listView
x: 476
y: 64
width: 110
height: 160
model: myModel
ListModel {
id: myModel
ListElement {
name: "Grey"
colorCode: "grey"
}
ListElement {
name: "Red"
colorCode: "red"
}
ListElement {
name: "Blue"
colorCode: "blue"
}
ListElement {
name: "Green"
colorCode: "green"
}
}
delegate: Item {
x: 5
width: 80
height: 40
Row {
id: row1
Rectangle {
width: 40
height: 40
color: colorCode
}
Text {
text: name
anchors.verticalCenter: parent.verticalCenter
font.bold: true
}
spacing: 10
}
}
}
}
Python:
import sys
from PyQt5.QtCore import QUrl, QStringListModel
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQuick import QQuickView
app = QApplication(sys.argv)
view = QQuickView()
view.setSource(QUrl("main.qml"))
pyList = QStringListModel()
view.rootContext().setContextProperty("myModel",pyList)
print(pyList.stringList())
print(pyList.rowCount())
view.show()
print("Done!")
sys.exit(app.exec_())
我的印象是,当我们使用 python 绑定时,在 python 中创建的对象绑定到 QML 对象。因此,如果 QML 列表有数据(在 UI 中动态创建),python 列表应该自动填充该数据吗?我错过了什么?