【问题标题】:Sort checkbox only columns仅对复选框进行排序
【发布时间】:2021-03-28 22:52:09
【问题描述】:

这是我当前的代码。

import sys

from PySide6.QtCore import Qt
from PySide6.QtWidgets import (
    QApplication,
    QProxyStyle,
    QStyle,
    QTableWidget,
    QTableWidgetItem,
)


class ProxyStyle(QProxyStyle):
    def subElementRect(self, e, opt, widget):
        r = super().subElementRect(e, opt, widget)
        if e == QStyle.SE_ItemViewItemCheckIndicator:
            r.moveCenter(opt.rect.center())
        return r


class Table(QTableWidget):
    def __init__(self):
        QTableWidget.__init__(self, 3, 1)
        self.setSortingEnabled(True)
        self._style = ProxyStyle(self.style())
        self.setStyle(self._style)
        for i in range(self.rowCount()):
            for j in range(self.columnCount()):
                it = QTableWidgetItem()
                self.setItem(i, j, it)
                it.setFlags(Qt.ItemIsEnabled | Qt.ItemIsUserCheckable)
                it.setCheckState(Qt.Checked if (i + j) % 2 == 0 else Qt.Unchecked)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = Table()
    w.show()
    sys.exit(app.exec_())

我希望当您单击列标题时,复选框按其状态排序。

如你所见,setSortingEnabled(True) 是不够的。

【问题讨论】:

    标签: python qtablewidget pyside6


    【解决方案1】:

    默认情况下,QTableWidgetItem 使用文本进行比较,以便您观察此行为,如果您希望它按另一个属性排序,则必须重写 __lt__ 方法:

    class CheckboxTableWidgetItem(QTableWidgetItem):
        def __lt__(self, other):
            if self.checkState() == other.checkState():
                return False
            elif self.checkState() == Qt.Checked:
                return False
            return True
    
    for i in range(self.rowCount()):
        for j in range(self.columnCount()):
            it = CheckboxTableWidgetItem()
            self.setItem(i, j, it)
            it.setFlags(Qt.ItemIsEnabled | Qt.ItemIsUserCheckable)
            it.setCheckState(Qt.Checked if (i + j) % 2 == 0 else Qt.Unchecked)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-06
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多