PyQt5 QTableWidget只显示第一行和第一列

时间:2014-12-09 13:33:19

标签: python-3.x qtablewidget pyqt5 qtablewidgetitem

我有一个QTableWidget填充了一个列表列表。每个内部列表都有八个元素,我的表有一个第九个控制列,在其他元素加载后计算出来。 我可以阅读和打印来控制表格中任何单元格的内容,例如print(self.tAccounts.item(52,3).text()),所以我认为数据没有问题,但是表格只显示第一行的单元格内容和表中的列,留下其他银行。 我应该在某个地方犯错,但我无法看到。

使用PyQt 5和Python 3。

构造函数

class Table(QWidget):
    def __init__(self, parent=None):
        super(Table, self).__init__(parent)

        self.accounts = [] # The source is created in the constructor\
                           # and populate in other member function
        self.tAccounts = QTableWidget(0,9)
        self.tAccounts.setSortingEnabled(True)
        self.tAccounts.setHorizontalHeaderLabels(['1','2','3','4','5','6','7','8','9'])
        self.tAccounts.resizeColumnsToContents()
        self.tAccounts.verticalHeader().hide()

成员函数:

def loadDay(self):
    for row, account in enumerate(self.accounts):
        self.tAccounts.insertRow(row)
        for col in range(8):
            self.tAccounts.setItem(row, col, QTableWidgetItem(str(accounts[col])))
            self.tAccounts.item(row,col).setTextAlignment(Qt.AlignRight)
        self.tAccounts.setItem(row, 8, QTableWidgetItem('')) # defined for further use

1 个答案:

答案 0 :(得分:0)

最后我发现了它。

问题在于在构造函数中启用排序。似乎默认排序是Z-A。通过单击空表的标题将排序更改为A-Z可以解决错误,但最佳解决方案是将行self.tAccounts.setSortingEnabled(True)移动到loadDay函数的末尾。由于启用了排序和QTableWidget

的更新算法,似乎是不断变化的行号之间的冲突