Как сохранить исходные цвета текста, установленные с помощью setForeground(), когда выбран QTableWidgetItemCSS

Разбираемся в CSS
Ответить
Гость
 Как сохранить исходные цвета текста, установленные с помощью setForeground(), когда выбран QTableWidgetItem

Сообщение Гость »

Моя проблема:
Сейчас, как вы можете видеть на рис. 2 ниже, при выборе первой строки для всех цветов текста устанавливается черный вместо сохранения исходного цвета. стиль отображается на рис. 1.

Есть ли способ сохранить исходные цвета при выборе строки (как показано на рис. 3)? Должен ли я продолжать полагаться только на CSS или мне просто создать QAbstractItemDelegate, чтобы решить эту проблему?

Если необходим QAbstractItemDelegate, это быстрее, чем использование CSS, или замедляет работу приложения?


Изображение


Рис. 1. Как это выглядит без выделения.


Изображение


Рис. 2. Как это выглядит, когда пользователь выбирает строку 0.


Изображение


Рис. 3. Сделано в Paint, как бы я хотел, чтобы оно вело себя.

Настройки:

Я использую PySide2: Qt5 на Python 3.10 в Windows 10.

В моем примере я установил несколько свойств в моем QTableWidget перед вставкой в ​​него строк:

self.setEditTriggers(QAbstractItemView.NoEditTriggers) self.setDragDropMode(QAbstractItemView.NoDragDrop) self.setFocusPolicy(Qt.NoFocus) self.setSelectionBehavior(QAbstractItemView.SelectRows) self.setSelectionMode(QAbstractItemView.SingleSelection) self.setAlternatingRowColors(True) self.setShowGrid(False) ТВ = self.verticalHeader() tv.setVisible(False) tv.setSectionsClickable(False) tv.setSectionResizeMode(QHeaderView.Fixed) tv.setDefaultAlignment(Qt.AlignHCenter) th = self.horizontalHeader() th.setHighlightSections(False) th.setStretchLastSection(True) th.setSectionResizeMode(QHeaderView.Interactive) # За исключением столбца 0: ResizeMode — это ResizeToContents Затем я создал функцию, позволяющую легко вставлять в нее элементы. Это большая функция, которая использует несколько методов из QTableWidget и QTableWidgetItem, показанных здесь:

# Вставляем строку в таблицу по указанному индексу self.insertRow(индекс) # Получите QTableWidgetItem из строки r и столбца c и убедитесь, что он существует элемент = self.item(r, c) если (пункт Нет): элемент = QTableWidgetItem() self.setItem(r, c, элемент) # Чтобы изменить цвет текста, используя QColor QTableWidgetItem.setForeground() # Чтобы изменить выравнивание текста, используя Qt Flags QTableWidgetItem.setTextAlignment() # Чтобы установить текст внутри ячейки QTableWidgetItem.setText() Мой CSS, связанный с этими виджетами:

QTableWidget { граница: 1 пиксель, сплошная #ddd; } QTableWidget::item { цвет фона: белый; } QTableWidget::item:альтернативный { цвет фона: #f1f1f1; } /* Я уже пробовал установить «color: inherit», но эффекта нет */ QTableView::item:selected, QTableView::item:alternate:selected { цвет фона: #92b7d1; } QHeaderView::section { цвет фона: светло-серый; } QHeaderView::section:hover { цвет фона: серебро; } Забыл упомянуть после публикации: закругленный цветной квадрат в столбце «Цвет» представляет собой текст в Юникоде из FontAwesomes, который я скачал OTF-файл и добавил в приложение с помощью QFontDatabase из PySide2. В общем вот этот парень.
Ответить

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

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

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

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

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