Как изменить цвет подсветки QCombobox в PyQt

У меня возникают проблемы при изменении цвета выделения QCombobox в PyQt. Мне удалось изменить цвет подсветки фактического поля ввода, но когда выпадающий список появляется, он все еще синий. Следующие изображения показывают, что именно происходит. Метод палитры работает в Linux, но не в Windows (то, что я сейчас использую). Я использовал PyQt палитру:

    brush = QtGui.QBrush(QtGui.QColor(168, 168, 168))
    brush.setStyle(QtCore.Qt.SolidPattern)
    palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Highlight, brush)
    self.comboBox_7.setPalette(palette)

Здесь мне удалось изменить цвет подсветки на серый на самом поле:

image1

но здесь выпадающая подсветка все еще синяя:

image2

вся помощь оценена.

2 ответа

Решение

Согласно документации Qt, палитра может не всегда работать на некоторых платформах:

Предупреждение. Некоторые стили не используют палитру для всех рисунков, например, если они используют собственные движки тем. Это касается как Windows XP, Windows Vista, так и стилей macOS.

Обзор таблиц стилей Qt предполагает, что таблица стилей должна работать там, где не работает палитра. Я сам не могу проверить это ни на чем, кроме Linux, но, похоже, следующее работает нормально:

from PyQt5 import QtWidgets
app = QtWidgets.QApplication([''])
combo = QtWidgets.QComboBox()
combo.addItems('One Two Three'.split())
combo.setStyleSheet('selection-background-color: rgb(168,168,168)')
combo.show()
app.exec_()

Я хотел бы добавить, что, хотя установка "selection-background-color" для QComboBox может показаться очевидной, на самом деле это свойство принадлежит QWidget. Поэтому, если вам нужно быть явным, вы можете сделать что-то вроде этого combo.setStyleSheet('QWidget{selection-background-color: rgb(168,168,168);}')

Другие вопросы по тегам