Python PyQt QTableWidget、JSON和emitSignal导致空白单元格

2024-06-08 04:26:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我将PyQt用于一个简单的应用程序,它从带有JSON格式字符串的日志文件中读取数据,并将它们很好地输出到表中。

除了我试图从“加载”函数发出信号外,一切都按预期工作。这个信号是由主窗口接收的,在一个插槽中设计用来利用新的信息表。

在没有发出信号的情况下,表将完全正确地填充:

Normal view, no signal

通过取消对self.emit的注释以发出信号,表最终将不完整:

Signal emitted, blank cells

正如您在第一幅图像中看到的,表没有被排序,但是所有字段都被填充。在第二幅图中,表被排序,但是有些字段是空的!

填充表并发送信号的代码:

#openLog function does stuff, then populates the table as follows

self.ui.tableWidget.setRowCount(len(entries))
self.ui.tableWidget.verticalHeader().setVisible(False)

for i, row in enumerate(entries):
    for j, col in enumerate(row):
        item = QtGui.QTableWidgetItem(col)
        self.ui.tableWidget.setItem(i, j, item)

#When this is uncommented, the table ends up having a lot of blank cells.
#self.emit(QtCore.SIGNAL("updateSignal"))

接收信号并执行以下操作的代码:

#main window class
    #__init__
        self.ui.tableWidget.connect(self,QtCore.SIGNAL("updateSignal"),self.updateTable)

    def updateTable(self):
        self.ui.tableWidget.sortItems(0,QtCore.Qt.DescendingOrder)

程序流称为:program_init->;register_signal。打开日志的用户操作->;填充表/发出信号的open log函数->;接收信号/度假村表

对于这个方法,我使用信号和插槽,好像没有,QT/Python抛出了一堆警告,说从函数中重新绘制GUI/Pixmap是不安全的。

问题: 如何使QTableWidget对所需的列进行排序,同时确保表已完全填充?


Tags: the函数代码gtselfui信号排序

热门问题