import sys
from PyQt5 import QtCore, QtWidgets
class NumericItem(QtWidgets.QTableWidgetItem):
""" QTableWidgetItem с перегруженым оператором сравнения """
""" Каждый элемент item имеет набор связанных с ним элементов данных data,
каждый со своей ролью. Роли используются представлением, чтобы указать тип данных. """
def __lt__(self, other):
""" Перегружает оператор сравнения data в QTableWidgetItem """
return (self.data(QtCore.Qt.UserRole) < other.data(QtCore.Qt.UserRole))
app = QtWidgets.QApplication(sys.argv)
tableWidget = QtWidgets.QTableWidget(15,3)
tableWidget.setGeometry(400, 100, 400, 550)
tableWidget.setSortingEnabled(False)
# Заполняем первый столбец как обычно
for i, e in enumerate('ABCDEFGHIJKLMNO'):
item = QtWidgets.QTableWidgetItem(e)
tableWidget.setItem(i, 0, item)
l = ['не знаю', 'абсолютно', 'нет', 'абсолютно', 'не знаю', 'абсолютно', 'да',
'не знаю', 'абсолютно', 'да', 'не знаю', 'нет', 'абсолютно', 'нет', 'да']
def mysortorder(e):
""" каждому слову назначаем вес """
ves = {'абсолютно':3, 'нет':4, 'да':20, 'не знаю':1}
return ves[e]
# Заполняем второй столбец с нашей кастомной сортировкой
for row, val in enumerate(l):
item = NumericItem(val) # Это QTableWidgetItem с перегруженым оператором сравнения
item.setData(QtCore.Qt.UserRole, mysortorder(val)) # В data записываем число - вес
tableWidget.setItem(row, 1, item)
tableWidget.setSortingEnabled(True)
tableWidget.sortItems(0, QtCore.Qt.AscendingOrder)
tableWidget.show()
sys.exit(app.exec_())
from functools import cmp_to_key
def compare(a, b):
""" здесь определяем функцию сравнения """
ves = {'абсолютно':3, 'нет':4, 'да':2, 'не знаю':1} # задаем произвольные веса
return ves[a] - ves[b]
l = ['не знаю', 'абсолютно', 'нет', 'абсолютно', 'не знаю', 'абсолютно', 'да',
'не знаю', 'абсолютно', 'да', 'не знаю', 'нет', 'абсолютно', 'нет', 'да']
print(sorted(l, key=cmp_to_key(compare)))
clr_dec = {'MidnightBlue': 'Blue', 'DodgerBlue': 'Blue', ну и так далее 'Crimson': 'Red'}
что-то вроде этого
clr = clr_dec['DodgerBlue'] # Blue
https://htmlcolorcodes.com/color-names/