gpt4 book ai didi

python - 排序后 QTableWidget 的填充不完整

转载 作者:行者123 更新时间:2023-12-04 09:42:02 24 4
gpt4 key购买 nike

我有一个 QTableWidget,它将填充一些随机值。
该表已启用排序:tableWidget.setSortingEnabled(True) .
排序工作正常(我知道,在这个最小的例子中,它将是字母数字排序的数字)。

但是,当我按一列对表格进行排序时,然后在此处用各种建议清除表格,或者 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_())

结果: (排序和重新填充后)

enter image description here

最佳答案

问题是,当您添加项目时,您正在重新排序,例如,假设您已正确插入第一行的值,但随后在 (1, 0) 中输入了一个小于项目 (0, 0) 的新项目) 通过什么将被重新排序(项目 (0, j) 将是 (1, j)),并且当您插入时,您设置的项目 (1, 1) 将替换占据位置 (0, 1) 的项目,因此项目 (0 , 2) 将保持为空。

解决方案是通过填充表来禁用排序。

@pyqtSlot()
def on_click_pb_refill(self):
self.tableWidget.clear()
self.tableWidget.setSortingEnabled(False)
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)))
self.tableWidget.setSortingEnabled(True)

关于python - 排序后 QTableWidget 的填充不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62284220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com