私はPyQtを使用して、JSON形式の文字列を含むログファイルから読み取り、それらをテーブルに適切に出力する単純なアプリケーションを使用しています。
'load'関数からシグナルを出力しようとする場合を除いて、すべてが期待どおりに機能しています。この信号は、新しい情報でテーブルを再利用するように設計されたスロットで、メインウィンドウによって取得されます。
信号が発信されない場合、テーブルは完全かつ適切に入力されます。
self.emit
信号が発信されるようにコメントを解除すると、テーブルは不完全になります。
最初の画像でわかるように、テーブルは並べ替えられていませんが、すべてのフィールドにデータが入力されています。2番目の画像では、テーブルが並べ替えられていますが、一部のフィールドが空白になっています。
テーブルにデータを入力してシグナルを送信するコード:
#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を目的の列で並べ替えるにはどうすればよいですか?