对 QTableWidget 中的数字列进行排序
Posted
技术标签:
【中文标题】对 QTableWidget 中的数字列进行排序【英文标题】:Sorting numeric column in QTableWidget 【发布时间】:2020-09-21 19:13:28 【问题描述】:我正在尝试使用 PyQT5 。我阅读了一些示例并进行了尝试,但效果不佳。 它总是返回相同的结果。
这是在排序之前
这是排序后的
【问题讨论】:
【参考方案1】:问题是在 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, 0, 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, 0, it)
w.resize(640, 480)
w.show()
sys.exit(app.exec_())
【讨论】:
非常感谢您的回复。我尝试了您的解决方案,但效果不佳,实际上,这些数字是从数据库中调用的,可能缺少某些数字。这是您的解决方案的结果:ibb.co/mz4gjX9 @AnhTu 1) 您尝试过以下两个选项中的哪一个? 2)如果您需要帮助,则必须提供minimal reproducible example以上是关于对 QTableWidget 中的数字列进行排序的主要内容,如果未能解决你的问题,请参考以下文章