问题描述
我正在尝试使用PyQT5在QTableWidget中对数字列进行排序。我阅读了一些示例,并尝试了一下,但是效果不是很好。 它总是会返回相同的结果。
这是在排序之前
这是经过排序的
解决方法
问题是在QTableWidgetItem中使用字符串而不是数字。鉴于此,有几种选择:
-
存储数字而不是字符串:
import sys from PyQt5 import QtCore,QtWidgets app = QtWidgets.QApplication(sys.argv) w = QtWidgets.QTableWidget(100,1) w.setSortingEnabled(True) for i in range(w.rowCount()): it = QtWidgets.QTableWidgetItem() it.setData(QtCore.Qt.DisplayRole,i) w.setItem(i,it) w.resize(640,480) w.show() sys.exit(app.exec_())
-
重写QTableWidgetItem的
__lt__
方法:import sys from PyQt5 import QtWidgets class TableWidgetItem(QtWidgets.QTableWidgetItem): def __lt__(self,other): try: return float(self.text()) < float(other.text()) except ValueError: return super().__lt__(other) app = QtWidgets.QApplication(sys.argv) w = QtWidgets.QTableWidget(100,1) w.setSortingEnabled(True) for i in range(w.rowCount()): it = TableWidgetItem(str(i)) w.setItem(i,it) w.resize(640,480) w.show() sys.exit(app.exec_())