Assigning to PyQt5 QQmlListProperty gives type error
-
Hi,
I defined a custom type in python that contains a list of points that is exposed to qml as a QQmlListProperty. When assigning to it however, I get an error:
TypeError: list element must be of type 'QPointF', not 'NoneType'
I already checked the types of the list elements in QML and they are correct.
This is a minimal sample that demonstrates the error:
Python:#!/usr/bin/python import sys from PyQt5.QtCore import QPointF, pyqtProperty from PyQt5.QtGui import QGuiApplication from PyQt5.QtQml import QQmlApplicationEngine, QQmlListProperty, qmlRegisterType from PyQt5.QtQuick import QQuickItem class CustomType(QQuickItem): _points = [] @pyqtProperty(QQmlListProperty) def points(self): return QQmlListProperty(QPointF, self, self._points) @points.setter def points(self, points): self._points = points print(self._points) def main(): qmlRegisterType(CustomType, 'Example', 1, 0, 'CustomType') application = QGuiApplication(sys.argv) engine = QQmlApplicationEngine('qmllistpropertydemonstration.qml') engine.rootObjects()[0].setPoints([QPointF(1, 2), QPointF(3, 4)]) return application.exec() if __name__ == '__main__': main()
QML:
import Example 1.0 ApplicationWindow { width: 640 height: 480 function setPoints(points) { customtype.points = points } CustomType { id: customtype } }
For now I fixed this by assigning the points in python instead of QML but I'd like to get rid of that workaround.
What am I doing wrong?