PySide2 - изменить цвет фона заголовка таблицы - PullRequest
0 голосов
/ 23 января 2019

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

enter image description here

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

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

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

enter image description here

1 Ответ

0 голосов
/ 24 января 2019

Здесь я публикую то, что узнал в своем поиске ответа - 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. Как выглядит моя таблица с применением второго решения:

enter image description here

...