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

Posted

技术标签:

【中文标题】PyQt5 QTableWidget 仅显示第一行和第一列【英文标题】:PyQt5 QTableWidget showing only first line and column 【发布时间】:2014-12-09 13:33:19 【问题描述】:

我有一个 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】:

终于找到了。

问题在于在构造函数中启用排序。似乎默认排序是 Z-A。通过单击空表的标题将排序更改为 A-Z 可以解决该错误,但最好的解决方案是将行 self.tAccounts.setSortingEnabled(True) 移动到 loadDay 函数的末尾。似乎是因为启用排序而不断变化的行号与QTableWidget的更新算法之间的冲突

【讨论】:

以上是关于PyQt5 QTableWidget 仅显示第一行和第一列的主要内容,如果未能解决你的问题,请参考以下文章

得到选择行pyqt5 qtablewidget

如何从 QComboBox 中获取所选项目以显示在 PyQt5 的 QTableWidget 中? (QComboBox 有复选框来选择项目)

如何在 PyQt5 QTableWidget 中获取选定索引中的项目总和

QTablewidget 在 PyQt5 中不显示新的 cellWidgets

pyqt5 QTableWidget 不会显示来自 PyEve 数据集的 id 键值

PyQt5 - 从 sqlite3 复制到 QTableWidget 的 SQL 行不显示