Pyqt5 QAbstractTableModel dataChanged不更新数据

时间:2018-02-28 16:51:49

标签: python pyqt pyqt5 qtableview qabstracttablemodel

我在通过pydispatcher收到系统更改通知后,尝试更新我的QTableView。我确实创建了以下功能

def rowCount(self, parent=None):
    return len(self.m_list)

def columnCount(self, parent=None):
    return len(self.table_def)

def headerData(self, col, orientation, role):
    if orientation == Qt.Horizontal and role == Qt.DisplayRole:
        return self.table_def[col]['Header']
    return QVariant()

def data(self, index, role=Qt.DisplayRole):
    if not index.isValid():
        return None
    if index.row() >= len(self.m_list) or index.row() < 0:
        return None

    row = index.row()
    col = index.column()

    print("Called for (%s, %s, %s)" % (row, col, role))
    if role == Qt.DisplayRole:
        return self.table_def[index.column()]['Function'](index.row())
    elif role == Qt.BackgroundRole:
        batch = (index.row() // 100) % 2
        if batch == 0:
            return QApplication.palette().base()

        return QApplication.palette().alternateBase()
    else:
        return None

def flags(self, index):
    if not index.isValid():
        return None
    return Qt.ItemIsEnabled

def update_model(self, data):
    print('update_model')
    index_1 = self.index(0, 0)
    index_2 = self.index(0, 1)
    self.dataChanged.emit(index_1, index_2, [Qt.DisplayRole])

self.dataChanged.emit(index_1, index_2, [Qt.DisplayRole])行似乎没有做任何事情;即data(self, index, role=Qt.DisplayRole)未被调用。

如果我点击表格,则会调用data(self, index, role=Qt.DisplayRole)并更新表格。

我现在的修复是调用beginResetModel()和endResetModel()。这是有效的,但它不应该如何运作。

知道会发生什么事吗?

0 个答案:

没有答案