2016-11-20 7 views
0

У меня есть qtcombobox. Я пытаюсь добавить стиль, используя таблицу стилей qss, и она не отображается правильно. Белый фон, который вы видите ниже, нежелателен.pyside qcombobox не правильно укладывается

Изображение:

qcombobox_image

Мой код стиль его:

QWidget 
{ 
    color: #eff0f1; 
    background-color: #31363b; 
    selection-background-color:#3daee9; 
    selection-color: #eff0f1; 
    background-clip: border; 
    border-image: none; 
    border: 0px transparent black; 
    outline: 0; 
} 


QComboBox 
{ 
    selection-background-color: #3daee9; 
    border-style: solid; 
    border: 1px solid #76797C; 
    border-radius: 2px; 
    padding: 5px; 
    min-width: 75px; 
} 

QComboBox:hover,QPushButton:hover,QAbstractSpinBox:hover,QLineEdit:hover,QTextEdit:hover,QPlainTextEdit:hover,QAbstractView:hover,QTreeView:hover 
{ 
    border: 1px solid #3daee9; 
    color: #eff0f1; 
} 

QComboBox:on 
{ 
    padding-top: 3px; 
    padding-left: 4px; 
    selection-background-color: #4a4a4a; 
} 

QComboBox QAbstractItemView 
{ 
    background-color: #232629; 
    border-radius: 2px; 
    border: 1px solid #76797C; 
    selection-background-color: #3daee9; 
} 

QComboBox::drop-down 
{ 
    subcontrol-origin: padding; 
    subcontrol-position: top right; 
    width: 15px; 

    border-left-width: 0px; 
    border-left-color: darkgray; 
    border-left-style: solid; 
    border-top-right-radius: 3px; 
    border-bottom-right-radius: 3px; 
} 

QComboBox::down-arrow 
{ 
    image: url(:/qss_icons/rc/down_arrow_disabled.png); 
} 

QComboBox::down-arrow:on, QComboBox::down-arrow:hover, 
QComboBox::down-arrow:focus 
{ 
    image: url(:/qss_icons/rc/down_arrow.png); 
} 

Что может вызвать внутреннюю часть наиболее оставаться белым? Для чего это стоит, выпадающее меню выглядит правильно. Не уверен, что возится с ним, чтобы сделать часть bg white.

Редактировать: Итак, я создал небольшой тестовый пример с этой таблицей стилей и минимальным минимумом, и qcombobox работает там. Существует много кода, который касается этого qcombobox, поэтому что-то еще, возможно, возится с ним, но я не знаю, с чего начать или как его уменьшить. Любые подсказки/предложения приветствуются. Я пробовал комментировать другие команды setstylesheet и очевидные основы.

+0

Вы единственный, кто может видеть код, поэтому я думаю, что это ваша возможность изучить некоторые основные методы отладки. Начните с комментирования всех таблиц стилей, а затем добавьте их обратно один за другим. Это действительно не так сложно. – ekhumoro

+0

@ekhumoro Мое изменение упоминает, что я уже прокомментировал другие таблицы стилей и что я все еще получаю такое поведение. Мне было интересно, есть ли название для кнопки для кнопки. Не выпадающий список. qcombobox состоит из нескольких различных элементов. Если я смогу найти это имя, я могу найти код для чего-то, что может изменить стиль по-другому, кроме вызова setstylesheet. –

+1

Извините, я почему-то пропустил эту часть. Если combo-box доступен для редактирования, он будет содержать 'QLineEdit', поэтому, вероятно, что-то меняет стиль. – ekhumoro

ответ

1

По какой-то причине правила таблиц стилей не кажутся каскадами для редактирования строк в комбинированном поле. Единственное решение, кажется, чтобы применить таблицу стилей непосредственно:

self.combo.lineEdit().setStylesheet('background-color: red') 

Это не может работать со всеми виджете стилей, хотя (например, это не похоже на работу со стилем «Windows»).

EDIT:

Вот что я использовал для тестирования:

from PySide import QtCore, QtGui 

class Window(QtGui.QWidget): 
    def __init__(self): 
     super(Window, self).__init__() 
     self.button = QtGui.QPushButton('Test', self) 
     self.button.clicked.connect(self.handleButton) 
     self.combo = QtGui.QComboBox(self) 
     self.combo.setEditable(True) 
     self.edit = QtGui.QLineEdit(self) 
     layout = QtGui.QVBoxLayout(self) 
     layout.addWidget(self.button) 
     layout.addWidget(self.edit) 
     layout.addWidget(self.combo) 
     self.setStyleSheet(""" 
      QWidget 
      { 
      background-color: yellow; 
      } 
      QComboBox 
      { 
      background-color: blue; 
      } 
      QLineEdit 
      { 
      background-color: red; 
      } 
      """) 

    def handleButton(self): 
     self.combo.lineEdit().setStyleSheet(self.styleSheet()) 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Window() 
    window.setGeometry(600, 200, 300, 100) 
    window.show() 
    sys.exit(app.exec_()) 

А вот результаты, которые я получаю на Linux:

enter image description here

нажав кнопку «Test "кнопка устанавливает фон редактирования комбинированной строки. Я также пробовал некоторые другие селектора, такие как QComboBox > QLineEdit, QLineEdit#foobar и т. Д., Но ни один из них не имеет никакого эффекта.

+0

Код, с которым я работаю, действительно искал линию. Эта строка кода исправляет мою проблему, но я бы не стал возиться с ручным управлением цветами. Эти строки перезагружают стили. –

+0

'self.view.style(). Unpolish (self.view)' 'self.view.style(). polish (self.view) ' ' self.view.update() ' –

+0

Спасибо за вашу помощь! –