【发布时间】:2020-09-28 17:25:30
【问题描述】:
我有一个 QTableWidget,它将填充一些随机值。
该表已启用排序:tableWidget.setSortingEnabled(True)。
排序工作正常(我知道,在这个最小的示例中,它将是字母数字排序的数字)。
但是,当我按一列对表格进行排序,然后在 SO 上用各种建议清除表格时,tableWidget.clear()、tableWidget.clearContent() 或 tableWidget.setRowCount(0) 并重新填充表格,表格将不完整地填充.我已经注意到,在排序的列之前,表格将不完全填充。因此,对最后一列进行排序将导致一个完全重新填充的表格。但这不是一个可接受的解决方法。
但是我在这里错过了什么?如何始终完全重新填充表格?
代码:
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QAction, QTableWidget, QTableWidgetItem, QVBoxLayout, QPushButton
from PyQt5.QtCore import pyqtSlot
import random
class App(QWidget):
def __init__(self):
super().__init__()
self.title = 'PyQt5 table'
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(0,0,700,500)
self.layout = QVBoxLayout()
self.tableWidget = QTableWidget()
self.tableWidget.setSortingEnabled(True)
self.layout.addWidget(self.tableWidget)
self.pb_refill = QPushButton("Refill")
self.pb_refill.clicked.connect(self.on_click_pb_refill)
self.layout.addWidget(self.pb_refill)
self.setLayout(self.layout)
self.show()
@pyqtSlot()
def on_click_pb_refill(self):
# self.tableWidget.clear()
# self.tableWidget.clearContents()
self.tableWidget.setRowCount(0)
rows_random = int(random.random()*7)+5
self.tableWidget.setRowCount(rows_random)
self.tableWidget.setColumnCount(6)
for row in range(rows_random):
for col in range(6):
number = random.random()
self.tableWidget.setItem(row, col, QTableWidgetItem(str(number)))
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
结果:(排序并重新填充后)
【问题讨论】:
标签: python sorting pyqt qtablewidget