【问题标题】:Python: numerical sorting in QTableWidgetPython:QTableWidget 中的数值排序
【发布时间】:2012-09-22 07:42:38
【问题描述】:

我需要将 QTableWidget 的第一列填充为: Row: 1, Row: 2...Row: 100 , 但排序没有按预期工作(数字上)。 使用此代码排序工作正常,但我没有得到预期的文本:

for i in range(0, self.rows):
    item = QtGui.QTableWidgetItem()
    item.setData(Qt.DisplayRole, "Row: %s" %(i) )
    item.setData(Qt.EditRole, i)
    self.ui.tableWidget.setItem(i, 0, item)

我得到:1,2,3,4... 而不是第 1 行,第 2 行,第 3 行... 我希望 EditRole 将用于编辑目的(用于数字排序,效果很好),但我也希望显示文本,因为它是使用 DisplayRole 设置的。 我可以以某种方式做到这一点,或者为排序目的编写函数是唯一的方法吗?

【问题讨论】:

    标签: python sorting pyqt qtablewidget


    【解决方案1】:

    对于QTableWidgetItemQt.DisplayRoleQt.EditRole 的处理方式相同。

    这意味着,在代码中:

    item.setData(Qt.DisplayRole, "Row: %s" %(i) )
    item.setData(Qt.EditRole, i)
    

    第二行将简单地覆盖第一行中的数据集。因此,实际上,没有单独的 EditRole(除非重新实现 datasetData 函数)。

    改变排序行为的标准方法是为QTableWidgetItem 重新实现小于运算符(默认情况下,它被硬编码为使用DisplayRole 数据进行排序)。

    以下子类将重现 Qt 通常对数字排序所做的事情:

    class TableWidgetItem(QtGui.QTableWidgetItem):
        def __lt__(self, other):
            return (self.data(QtCore.Qt.UserRole).toLongLong() <
                    other.data(QtCore.Qt.UserRole).toLongLong())
    

    【讨论】:

      【解决方案2】:

      我仍然对为什么 DisplayRole 和 EditRole 没有达到我的预期感兴趣,但我已经解决了这样的问题:

      class MyTableWidgetItem(QtGui.QTableWidgetItem):
          def __init__(self, text, sortKey):
                  QtGui.QTableWidgetItem.__init__(self, text, QtGui.QTableWidgetItem.UserType)
                  self.sortKey = sortKey
      
          #Qt uses a simple < check for sorting items, override this to use the sortKey
          def __lt__(self, other):
                  return self.sortKey < other.sortKey 
      

      ...填充表:

      for i in range(0, self.rows):
          item = MyTableWidgetItem("Row: %s" %(i), i)
          self.ui.tableWidget.setItem(i, 1, item)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        • 2022-11-13
        • 1970-01-01
        • 2016-01-08
        • 1970-01-01
        • 1970-01-01
        • 2018-10-17
        相关资源
        最近更新 更多