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 仅显示第一行和第一列的主要内容,如果未能解决你的问题,请参考以下文章
如何从 QComboBox 中获取所选项目以显示在 PyQt5 的 QTableWidget 中? (QComboBox 有复选框来选择项目)
如何在 PyQt5 QTableWidget 中获取选定索引中的项目总和
QTablewidget 在 PyQt5 中不显示新的 cellWidgets