QTableWidgetは使った事がありませんが、ググったら以下のstackoverflowのページを見つけました。
C++で書かれているけど、要は「QTableWidgetItem
の派生クラスを作って、比較演算子をオーバーライドしてやればいい」らしいので、Pythonで書いてみました。
python
1# coding: utf-8
2
3import sys, random
4from PyQt5.QtWidgets import *
5from PyQt5.QtCore import *
6from PyQt5.QtGui import *
7
8class MyItem(QTableWidgetItem):
9 def __init__(self, a, b):
10 super().__init__(QTableWidgetItem.ItemType.UserType)
11 self.a = a
12 self.b = b
13
14 def __lt__(self, other):
15 return self.a < other.a if self.a != other.a else self.b < other.b
16
17class MainWindow(QWidget):
18 def __init__(self):
19 super().__init__()
20
21 layout = QVBoxLayout()
22 self.setLayout(layout)
23
24 numRows = random.randint(10, 100)
25 table = QTableWidget(numRows, 3)
26 layout.addWidget(table)
27 for i in range(numRows):
28 item = MyItem(random.randint(0, 10), random.randint(0, 100))
29 table.setItem(i, 0, item)
30 table.setCellWidget(i, 0, QLabel(str(item.a)))
31 table.setCellWidget(i, 1, QLabel(str(item.b)))
32 table.setCellWidget(i, 2, QLabel(str(i)))
33 table.sortItems(0)
34
35 self.resize(400, 300)
36
37if __name__ == '__main__':
38 app = QApplication(sys.argv)
39
40 window = MainWindow()
41 window.show()
42
43 sys.exit(app.exec_())
44
QTableWidget
の使い方があっているかわからないけど、参考になれば幸いです。