Сортировать QTreeWidget в алфавитном порядке, кроме одного элемента.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Сортировать QTreeWidget в алфавитном порядке, кроме одного элемента.

Сообщение Anonymous »

У меня есть QTreeWidget с элементами. Один из элементов, который я использую для предоставления опции «Выбрать все».
Я хотел бы сохранить этот элемент «Выбрать все» закрепленным сверху, а затем отсортировать все остальные элементы ниже в алфавитном порядке. .
Я попытался создать РОЛЬ для элемента «Выбрать все», чтобы указать, что этот элемент всегда должен быть сверху. Поэтому я переопределяю метод lt, чтобы он возвращал False всякий раз, когда включена Skip_sorting, иначе сортируем в алфавитном порядке (см. код ниже).
Проблема, с которой я сталкиваюсь, заключается в том, что если я печатаю сравнения, которые вызываются ( print(self.text(column),other.text(column))), self всегда является элементом «Выбрать все», но я не вижу сравнения между другими элементами. Я использую pyside6 6.3.2

Код: Выделить всё

class TreeWidgetItem(QTreeWidgetItem):
"""
Sort items alphabetically but exclude the "Select All" on top
"""

def __lt__(self, other):
column = self.treeWidget().sortColumn()
print(self.text(column), other.text(column))

skip_sorting_self = self.data(column, _SKIP_SORT_ROLE)
skip_sorting_other = other.data(column, _SKIP_SORT_ROLE)

if skip_sorting_self and not skip_sorting_other:
return False

return self.text(column).lower() < other.text(column).lower()
Изображение


Обновление:
Вот рабочий пример того, что не работает:

Код: Выделить всё

import sys
from typing import Optional

from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QTreeWidget, QTreeWidgetItem, QWidget

_SKIP_SORT_ROLE: int = (Qt.UserRole + 4)

class TreeWidgetItem(QTreeWidgetItem):
"""
Sort items alphabetically but exclude the Select All
"""

def __lt__(self, other):
column = self.treeWidget().sortColumn()

skip_sorting_self = self.data(column, _SKIP_SORT_ROLE)
text = self.text(column)
if skip_sorting_self:
text = ''  # lowest possible

return text > other.text(column).lower()

class TreeWidget(QTreeWidget):

def __init__(self, parent: Optional[QWidget] = None):
super(TreeWidget, self).__init__(parent)

item = TreeWidgetItem(self)
item.setText(0, 'Select All')
item.setData(0, _SKIP_SORT_ROLE, True)

for i in range(10):
item = TreeWidgetItem(self)
item.setText(0, f'Item {i}')

for i in range(10):
item = TreeWidgetItem(self)
item.setText(0, f'Item {i}')

self.setSortingEnabled(True)

if __name__ == '__main__':
app = QApplication(sys.argv)
tree = TreeWidget()
tree.show()
sys.exit(app.exec())
Смотрите скриншот:
Изображение


Подробнее здесь: https://stackoverflow.com/questions/791 ... t-one-item
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Сортировать QTreeWidget в алфавитном порядке, кроме одного элемента.
    Anonymous » » в форуме Python
    0 Ответы
    42 Просмотры
    Последнее сообщение Anonymous
  • Сортировать QTreeWidget в алфавитном порядке, кроме одного элемента.
    Anonymous » » в форуме Python
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • Сортировать массив в алфавитном порядке в С#
    Anonymous » » в форуме C#
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • Как сортировать члены перечисления в алфавитном порядке в Java?
    Anonymous » » в форуме JAVA
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Проблема, пытаясь сортировать изображения в алфавитном порядке с помощью имени файла, которые были загружены в DIV через
    Anonymous » » в форуме Javascript
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»