使用正在进行的 PySide2(能够使用 Qt5),我有以下代码:
main.qml:
import QtQuick 2.0
import QtQuick.Controls 1.3
ApplicationWindow {
visible: true
ListView {
width: 100
height: 100
model: listModel
delegate: Text {
text: model.name
}
}
}
主要.py:
from sys import argv, exit
from PySide2.QtCore import QAbstractListModel
from PySide2.QtGui import QGuiApplication
from PySide2.QtQml import QQmlApplicationEngine
class TaskListModel(QAbstractListModel):
_COLUMNS = ('name',)
def data(self, index, role):
if role == self._COLUMNS.index('name'):
return str(index.row())
return None
def roleNames(self):
return dict(enumerate(self._COLUMNS))
def rowCount(self, parent):
return 1
app = QGuiApplication(argv)
engine = QQmlApplicationEngine()
engine.rootContext().setContextProperty('listModel', None)
engine.load('main.qml')
engine.rootContext().setContextProperty('listModel', TaskListModel())
exit(app.exec_())
在main.pyengine
结束时对对象的 3 个方法调用是这样的,因为:
Unable to assign [undefined] to QString
如果我使用,我会得到:engine.rootContext().setContextProperty('listModel', TaskListModel()) engine.load('main.qml')
ReferenceError: listModel is not defined
如果我使用,我会得到:engine.load('main.qml') engine.rootContext().setContextProperty('listModel', TaskListModel())
我的方法是正确执行此操作的唯一方法吗?我上面第一个项目符号中的代码不应该也可以工作吗?