【发布时间】:2012-04-05 00:37:07
【问题描述】:
我正在将 PyQt 用于一个简单的应用程序,该应用程序从带有 JSON 格式字符串的日志文件中读取,并将它们很好地输出到表格中。
一切都按预期工作,除非我尝试从“加载”函数发出信号。这个信号被主窗口接收到,在一个槽中,该槽被设计为用新信息重新访问表格。
在没有信号发射的情况下,表格完全正确地填充:
通过取消注释 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函数->接收到的信号/处理表
对于这种方法,我使用了信号和插槽,好像我不使用一样,QT/Python 会抛出一堆警告,说明从函数中重绘 GUI/Pixmap 是不安全的。
问题: 如何让 QTableWidget 对我想要的列进行排序,同时确保表格完全填充?
【问题讨论】:
标签: python pyqt qtablewidget