PySide2 - изменить цвет фона заголовка таблицы

Сейчас у меня есть QTableWidget по умолчанию. Я изменил цвет фона только для строк с четными индексами. Я хочу сделать то же самое для заголовков таблиц.

введите здесь описание изображения

То, что я пробовал - self.horizontalHeaderItem(...).setBackgroundColor(QColor(...)) и self.horizontalHeaderItem(...).setBackground(QBrush(...)) - не удалось.

Что я попробовал дальше - self.horizontalHeader().setStyleSheet("::section {" "background-color: lightblue; }") - мне удалось изменить цвет фона. Проблемы: (1) я не совсем понимаю, что это за код на самом деле, так как я не могу найти его в документации PySide2, (2) код меняет не только фон, но и многие функции внешнего вида заголовка.

Как я могу изменить только фон заголовка? Или, в более общем плане, как настроить внешний вид заголовка таблицы в PySide2?

введите здесь описание изображения


person Poolka    schedule 23.01.2019    source источник
comment
Я не совсем понимаю, что это за код на самом деле, так как я не могу найти его в документации PySide2. Если вы хотите найти документацию, не беспокойтесь о pyside или pyqt, просто найдите сам qt, это довольно легко конвертировать все, что вы видите, обратно в python :)   -  person Peter    schedule 24.01.2019


Ответы (1)


Здесь я публикую то, что я узнал в поисках ответа - 2 возможных решения.

Я предполагаю, что проблема возникает из-за какой-то запутанной смеси notImplemented, notDocumented, notExplained проблем с PySide2. Надеюсь, что в будущем ситуация изменится к лучшему. Теперь к ответу.

Проблема может быть решена так (а может и нет):

plt = QPalette()
plt.setColor(QPalette.Button, QColor(128, 0, 0))
my_table_widget.horizontalHeader().setPalette(plt)

QPalette управляет цветами виджетов. Но есть еще один уровень контроля внешнего вида — стиль. Я использую PySide2 на Win10x64, поэтому стиль по умолчанию — windowsvista, всего доступно 3 стиля: fusion, windows, windowsvista. Стиль Windowsvista игнорирует большинство цветов палитры. Итак, чтобы этот подход работал, нужно изменить стиль всего приложения (или только некоторых виджетов?):

app.setStyle(QStyleFactory.create('fusion'))

Другое решение, которое я придумал (предпочтительнее для меня):

my_table_widget.horizontalHeader().setStyleSheet('''
    ::section {
        background-color: lightgray;
        border-style: flat;
        padding: 0px 5px;
        }''')

вместе с:

my_table_widget.horizontalHeader().setDefaultAlignment(Qt.AlignLeft | Qt.AlignVCenter)

Я предполагаю, что это таблица стилей для настройки внешнего вида кнопки. Я не совсем понимаю значение слова section. Кроме того, для использования этого подхода необходимо использовать документацию Google и Qt5. Как выглядит моя таблица с применением второго решения:

введите здесь описание изображения

person Poolka    schedule 24.01.2019
comment
Я принял свой собственный ответ, так как он выглядит как жизнеспособный способ справиться с ситуацией. Как бы. Наверное. Я улучшу его, если найду верное решение проблемы. - person Poolka; 31.01.2019