QML にリストがあり、それを listView オブジェクトに表示しています。ボタンが押されたときに、Python からこのデータにアクセスする必要があります。Python で QStringListModel オブジェクトを作成し、setContextProperty を使用して QML の listModel にバインドします。リストが作成され、QML で期待どおりに表示されていることを確認できますが、Python からデータにアクセスしたい場合、リストは空です。コードは次のとおりです。
QML:
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
}
}
}
}
パイソン:
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 リストにはそのデータが自動的に入力されますか? 私は何が欠けていますか?