Как изменить цвет подсветки 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)
Здесь мне удалось изменить цвет подсветки на серый на самом поле:
но здесь выпадающая подсветка все еще синяя:
вся помощь оценена.
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);}')