簡體   English   中英

PyQt5 如何使用 python 在迭代循環中更新單元格值 Qtablewidget

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM