[PySide] List model from PySide to QML

  • Using a ListModel with a Repeater is rather straightforward. However, I'm struggling to produce a working model from PySide. My current test code is below. Any suggestions?

    @#!/usr/bin/env python

    -- coding: utf-8 --

    import sys
    from PySide.QtCore import *
    from PySide.QtGui import *
    from PySide.QtDeclarative import QDeclarativeView

    class TestModel(QAbstractListModel):
    def init(self, items):
    super(TestModel, self).init()
    self.items = items

    def rowCount(self, parent=QModelIndex()):
        return len(self.items)
    def data(self, index, role=Qt.DisplayRole):
        if role == Qt.DisplayRole:
            return QVariant(self.items[index.row()])
        elif role == Qt.EditRole:
            return QVariant(self.items[index.row()])
            return QVariant()

    QObject and object yield the same result

    #class TestObject(object):
    class TestObject(QObject):
    def init(self, message):
    super(TestObject, self).init()
    self.message = message

    class MainWindow(QDeclarativeView):
    def init(self, parent=None):
    super(MainWindow, self).init(parent)

        self.context = self.rootContext()
        # Both cause "ReferenceError: Can't find variable: message"
        self.context.setContextProperty("pyModel", test_model)
        #self.context.setContextProperty("pyModel", abstract_model)
        self.setWindowTitle("Test Bindigs")

    if name == 'main':
    app = QApplication(sys.argv)

    # Create test objects
    test_one = TestObject("One")
    test_two = TestObject("Two")
    # Create test model
    test_model = [test_one, test_two]
    print("{}, {}".format(test_model[0].message, test_model[1].message))
    # Create abstract test model
    abstract_model = TestModel([test_one, test_two])
    # Setup main window
    window = MainWindow()

    @import QtQuick 1.1

    FocusScope {
    id: window
    width: 400
    height: 400
    anchors.fill: parent
    focus: true

    // Model
    ListModel {
        id: qmlModel
        ListElement {
            message: "First"
        ListElement {
            message: "Second"
    // Delegate
    Component {
        id: testDelegate
        Rectangle {
            width: 100
            height: 20
            border.width: 1
            Text {
                anchors.centerIn: parent
                text: message  // ReferenceError: Can't find variable: message
    // View
    Column {
        anchors.centerIn: parent
        Repeater {
            model: pyModel  // Causes ReferenceError
            //model: qmlModel
            delegate: testDelegate


  • Still seeking a reply to this.

Log in to reply

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.