2016-11-20 82 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); 
} 

什么会导致最内部的部分保持白色? 对于它的价值,下拉菜单的造型正确。不知道是什么让它变成了白色的一部分。

编辑:所以我用这个样式表创建了一个小测试用例,最低限度和最低限度的工作,并且qcombobox在那里工作。有很多代码涉及到这个qcombobox,所以其他的东西可能会搞乱它,但我不知道从哪里开始或如何缩小它。任何提示/建议非常感谢。我试过评论其他setstylesheet命令和这样的明显的基础知识。

+0

你是唯一可以看到代码的人,所以我想这是你学习一些基本调试技巧的机会。首先注释掉所有的样式表,然后将它们逐个添加回来。这并不复杂。 – ekhumoro

+0

@ekhumoro我的编辑提到我已经评论过其他样式表,并且我仍然会得到这种行为。我想知道是否有按钮文本的名称。不是下拉列表。 qcombobox由几个不同的元素组成。如果我可以找到这个名字,我可能可以在代码中搜索可能以不同于调用setstylesheet的方式修改样式的东西。 –

+1

对不起,我不知道该怎么冷落那部分。如果组合框是可编辑的,它将包含一个'QLineEdit',所以可能会改变它的样式。 – ekhumoro

回答

1

出于某种原因,样式表规则似乎没有级联到组合框中的行编辑。唯一的解决办法似乎是直接套用样式表:

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

这可能不适用于所有部件的样式工作,虽然(例如,它似乎并没有与“窗口”式的工作)。

编辑

以下是我用于测试:

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

点击“测试“按钮确实设置了组合线编辑的背景。我还尝试了一些其他选择器,如QComboBox > QLineEdit,QLineEdit#foobar等 - 但它们都没有任何影响。

+0

我正在使用的代码实际上是篡改了lineedit。这行代码确实解决了我的问题,但我宁愿不要手动管理颜色。这些行重新加载样式。 –

+0

'self.view.style()。unpolish(self.view)' 'self。view.style()。polish(self.view)' 'self.view.update()' –

+0

感谢您的帮助! –