PyQt5如何使用python更新迭代循环中的单元格值Qtablewidget
我想一行一行地更新单元格。就像在Ajax中一样,表值一行一行地更新。目前我正在使用迭代循环一行一行地更新表。但它不会一行一行地更新,也会在后台进程运行时冻结GUI。 是否有其他方法实现逐行更新。 创建表我使用了QtableWidgetPyQt5如何使用python更新迭代循环中的单元格值Qtablewidget,python,python-3.x,pyqt5,qt5,Python,Python 3.x,Pyqt5,Qt5,我想一行一行地更新单元格。就像在Ajax中一样,表值一行一行地更新。目前我正在使用迭代循环一行一行地更新表。但它不会一行一行地更新,也会在后台进程运行时冻结GUI。 是否有其他方法实现逐行更新。 创建表我使用了QtableWidget with open('test.csv') as f: reader = csv.DictReader(f) for i,row in enumerate(reader):
with open('test.csv') as f:
reader = csv.DictReader(f)
for i,row in enumerate(reader):
print("i",i)
print(row)
marks= row['Marks']
total= self.total(marks)
self.tableWidget.setItem(i, 4, QTableWidgetItem(str(total)))
time.sleep(1)
获取冻结GUI和不逐个更新行的问题。
我想一个一个地更新它。
请给我一些建议,提前谢谢。在UI程序中不应该发生阻塞(至少,不是在其主线程中):GUI框架使用事件循环,不断处理来自系统的传入事件(包括用户交互),并允许正确的渲染更新
只有当函数将控件返回到事件循环时,UI才能正确地更新自身,在您的情况下,直到函数结束才会发生,这可能需要一段时间,因为时间。sleep
为了执行“延迟”和重复的任务,您可以使用QTimer
def fillTable(self):
with open('test.csv') as f:
self.csvIterator = csv.DictReader(f)
self.fillRow = 0
self.fillTimer = QtCore.QTimer()
self.fillTimer.setInterval(1000)
self.fillTimer.timeout.connect(self.updateTable)
self.fillTimer.start()
def updateTable(self):
try:
row = next(self.csvIterator)
except StopIteration:
self.fillTimer.stop()
return
print('i', self.fillRow)
print(row)
marks = row['Marks']
total = self.total(marks)
self.tableWidget.setItem(self.fillRow, 4, QTableWidgetItem(str(total)))
self.fillRow += 1
尝试将
QApplication.processEvents()
添加到for-loop的末尾。谢谢@ekhumoro它正在按我所希望的方式工作