Я использую 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 по желаемому столбцу, а также обеспечить полное заполнение таблицы?