Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在QTableWidget中对数字列进行排序_Python_Pyqt_Pyqt5_Qtablewidget - Fatal编程技术网

Python 在QTableWidget中对数字列进行排序

Python 在QTableWidget中对数字列进行排序,python,pyqt,pyqt5,qtablewidget,Python,Pyqt,Pyqt5,Qtablewidget,我正在尝试使用PyQT5对QTableWidget中的数字列进行排序。我读了一些例子并尝试过,但效果不太好。 它总是返回相同的结果 这是在分类之前 这是在分类之后 问题在于在QTableWidgetItem中使用字符串而不是数字。鉴于此,有几种选择: 存储数字而不是字符串: import sys from PyQt5 import QtCore, QtWidgets app = QtWidgets.QApplication(sys.argv) w = QtWidgets.Q

我正在尝试使用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, 0, it)
    
      w.resize(640, 480)
      w.show()
    
      sys.exit(app.exec_())

非常感谢您的回复。我尝试了你的解决方案,但效果不太好,事实上,这些号码是从数据库中调用的,可能缺少一些号码。这是您的解决方案的结果:@AnhTu 1)您尝试过两个选项中的哪一个?2) 如果你需要帮助,那么你必须提供帮助
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_())