我正在使用PyQt开发一个简单的应用程序,用于读取包含JSON格式字符串的日志文件,并将其在表格中漂亮地输出。
除了在尝试从“load”函数中发出信号时,一切都按预期工作。这个信号会被主窗口捕获,在一个槽中重新排列带有新信息的表格。
如果没有发出信号,表格将完全正确地填充:
通过取消注释self.emit
,使信号被发出后,表格最终变得不完整:
如您所见,在第一张图片中,表格未排序,但所有字段都填充了。在第二张图片中,表格已排序,但某些字段为空!
用于填充表格和发送信号的代码:
#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。当用户执行打开日志的操作时,将调用openLog函数,该函数会填充表格/发出信号->接收到信号/resort table。
为了实现此方法,我使用了信号和槽机制,如果不这样做,QT/Python会抛出一堆关于无法安全地从函数中重绘GUI/Pixmap的警告。
问题: 如何使QTableWidget按照我所需的列进行排序,同时确保表格已完全填充?
setSortingEnabled
选项确实给了我期望的行为。setSortingEnabled(False)
需要在setRowCount()
调用之前,而且信号发出后需要加上setSortingEnabled(True)
。谢谢。 - PenguinCoder