pyqt QTableView删除行导致Excpetion:Qt尝试为removed创建头

2024-09-25 18:26:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用PyQt编写QTableView和qabstractemodel的自定义实现。我想创建一个按钮,通过调用重新实现的rowRemoved事件处理程序从TableModel中删除一行。由于某些原因,model试图为已删除的行创建行标题,这会导致崩溃。在

下面是removeRowsheaderData和{}的实现。self.alignment.sequences是数据列表,每个头都填充sequences.name

def removeRows(self, position, rows, parent=QModelIndex()):
    print "removeRows called"
    self.beginRemoveRows(parent, position, position + rows -1)
    for i in range(int(rows)):
        self.alignment.sequences.pop(position)
    self.endRemoveRows()

def headerData(self, col, orientation, role):
    if orientation == Qt.Horizontal and role == Qt.DisplayRole:
        return QVariant(str(col))
    elif orientation == Qt.Vertical and role == Qt.DisplayRole:
        try:
            return self.alignment.sequences[col].name
        except:
            print "Exception: no header with index %s" % col

def rowCount(self, parent):
    return len(self.alignment.sequences)

由于某种原因,我的应用程序崩溃了。它的执行导致异常,在headerData中捕获:

^{pr2}$

GUI为头创建空间,对应于删除的行,但显然无法填充它。在

你为什么没有适当的反应?谢谢。在


Tags: nameselfreturndefpositioncolqtrole
1条回答
网友
1楼 · 发布于 2024-09-25 18:26:09

简单看一下,您的数据存储和标题似乎来自同一个变量。所以您可能已经从remove Row中删除了一个标题。如果您将它们作为单独的变量保存,那么您的数据操作根本不会影响您的头。在

另一个要做的事情是除去Try,除非有一个泛型异常。这样你就可以知道你得到了什么样的错误。在

try:
    return self.alignment.sequences[col].name
except (IndexError, AttributeError) as err:
    print(err)

相关问题 更多 >