PyQT Liste anzeigen reagiert nicht auf datachanged signal

Ich habe nach einigen tutorials und zu versuchen, um eine Liste mit Modell-set-up. Mein Hauptfenster hat zwei Listen-Ansichten, die den Zugriff auf das gleiche Modell. Wenn ich ein update für ein Element in einer Liste in der anderen Liste nicht aktualisieren sich, bis es den Fokus erhält (ich Klick drauf). So wie es aussieht die dataChanged signal nicht abgegeben wird, aber ich kann nicht herausfinden, wie mein code unterscheidet sich von jedem der Beispiele, die ich bin, stützt es ab.

main.py

class Main(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.ui = uic.loadUi("mainwindow.ui", self)

        # Test model and listviews
        data = [10,20,30,40,50]
        myModel = model.MyListModel(data)
        self.ui.listView.setModel(myModel)
        self.ui.listView_2.setModel(myModel)

model.py

class MyListModel(QtCore.QAbstractListModel):
    def __init__(self, data=[], parent=None):
        super(MyListModel, self).__init__(parent)
        self.__data = data

    def rowCount(self, parent=QtCore.QModelIndex()):
        return len(self.__data)

    def data(self, index, role=QtCore.Qt.DisplayRole):
        row = index.row()
        if role in (QtCore.Qt.DisplayRole, QtCore.Qt.EditRole):
            return str(self.__data[row])

        if role == QtCore.Qt.ToolTipRole:
            return 'Item at {0}'.format(row)

    def flags(self, index):
        return QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable

    def setData(self, index, value, role=QtCore.Qt.EditRole):
        if role == QtCore.Qt.EditRole:
            self.__data[index.row()] = value
            self.dataChanged.emit(index, index)
            return True
        return False

Kann jemand sehen, was ist hier falsch? FYI ich bin mit PyQT5.2.1 und Python 3.3.

InformationsquelleAutor arteater | 2014-03-21
Schreibe einen Kommentar