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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist mit der Unterschrift des
dataChanged
signal. In Qt4 sah es so aus:aber in Qt5 sieht es so aus:
als ich versuchte Ihre Beispiel-code mit PyQt-5.1.1, ich bekam eine Fehlermeldung beim Versuch, ein signal auszusenden, ohne das Dritte argument. Streng genommen, das war falsch Verhalten, weil der Dritte Parameter hat einen Standardwert. Also das ist vielleicht, warum das Verhalten geändert hat.
Aber es scheint, dass müssen Sie jetzt explizit Strahlen eine leere Liste als drittes argument von
dataChanged
damit die Dinge funktionieren bei PyQt5:oder, natürlich, Strahlen eine Liste der Rollen, die tatsächlich geändert wurden:
Die Lösung:
funktionieren bei mir nicht (python 2.7, PyQt5).
Aber eine der folgenden arbeiten: