Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PyQt5如何使用python更新迭代循环中的单元格值Qtablewidget_Python_Python 3.x_Pyqt5_Qt5 - Fatal编程技术网

PyQt5如何使用python更新迭代循环中的单元格值Qtablewidget

PyQt5如何使用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):

我想一行一行地更新单元格。就像在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框架使用事件循环,不断处理来自系统的传入事件(包括用户交互),并允许正确的渲染更新

只有当函数将控件返回到事件循环时,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它正在按我所希望的方式工作