2016-11-20 78 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

感謝您的幫助! –