[英]How to convert QTableWidget data to PDF using PyQt5 Python
[英]PyQt5 How can I update cell value Qtablewidget in iteration loop using python
我想逐行更新單元格。就像在 Ajax 中一樣,表值逐行更新。目前我正在使用迭代循環來逐行更新表。但它不會逐行更新也會凍結 GUI當后台進程正在運行時。 有沒有其他方法可以實現逐行更新。 創建表我使用了 QtableWidget。
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 框架使用事件循環不斷處理來自系統的傳入事件(包括用戶交互)並允許正確的渲染更新。
僅當 function 將控制權返回給事件循環時,UI 才能正確更新自身,並且在您的情況下,直到 function 結束后才會發生,這可能需要一段時間,因為time.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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.