2014-04-05 6 views
5

콤보 상자 항목을 먼저 만든 다음 항목의 배경색, 아이콘, 글꼴 색, 글꼴 크기 등과 같은 표시 속성을 설정하고 ComboBox에 추가 할 수 있습니까? .PyQt : 콤보 상자 항목을 사용자 지정하는 방법

myCombobox = QtGui.QComboBox 
for i in range(10): 
    myCombobox.addItem(str(i)) 

이 방법은 개별 콤보 상자의 항목 속성을 표시의 정의에 대한 작은 공간 나뭇잎 말할 필요도없이 내가하고 싶은 것은이 같은 것입니다 : 그것은 지금 내가 사용 붙어 따라 Comobobox의 .addItem() 메소드를 사용하여 :

myCombobox = QtGui.QComboBox 
for i in range(10): 
    item = comboboxItem() 
    item.setColor(allBlueAndShiny) 
    font = QtGui.QFont() 
    font.setPointSize(10) 
    item.setFont(font) 

    # Only after item was set with all display properties it is added:   
    myCombobox.addItem(str(i)) 

나중에 편집 됨

다음은 QCombobox의 사용자 정의 된 항목의 작동 예제입니다. 감사합니다 에쿠 모로!


기본적으로
from PyQt4 import QtGui, QtCore 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    window = QtGui.QWidget() 
    main_layout = QtGui.QVBoxLayout() 
    # QComboBox 
    combo = QtGui.QComboBox() 
    model = combo.model() 
    for row in range(10): 
     item = QtGui.QStandardItem(str(row)) 
     item.setForeground(QtGui.QColor('red')) 
     font = item.font() 
     font.setPointSize(10) 
     item.setFont(font) 
     model.appendRow(item) 
    main_layout.addWidget(combo) 

    ok_button = QtGui.QPushButton("OK") 
    ok_button.clicked.connect(OK)  
    main_layout.addWidget(ok_button) 

    main_layout.addStretch(1) 
    window.setLayout(main_layout) 
    window.show() 
    sys.exit(app.exec_()) 

def OK(self): 
    print 'OK' 

if __name__ == '__main__': 
    main() 

답변

7

QComboBoxQStandardItemModel을 사용하므로 QStandardItem 방법은 다양한 디스플레이 특성을 변경하는 데 사용할 수 있습니다 :

combo = QtGui.ComboBox() 
model = combo.model() 
for row in range(10): 
    item = QtGui.QStandardItem(str(index)) 
    item.setForeground(QtGui.QColor('red')) 
    font = item.font() 
    font.setPointSize(10) 
    item.setFont(font) 
    model.appendRow(item) 

PS :

당신이 원하는 경우를 item properties 중 하나를 재설정하려면 다음과 같이 None으로 설정하십시오. :

item = self.combo.model().item(row) 
    item.setData(None, QtCore.Qt.ForegroundRole) 
+0

바로! 고마워요! – alphanumeric

+0

항목의 전경색을 기본값 "no color"로 재설정하는 방법은 무엇입니까? ... 항목이 이미 item.setForeground (QtGui.QColor ('red'))로 설정된 후에는 색상을 기본 색상으로 바꿀 필요가 있으며 그 반대도 마찬가지입니다. – alphanumeric

+0

@Sputnix. 내 업데이트 답변을 참조하십시오. 또한 : 나는'QComboBox'가 이미'QStandardItemModel'을 사용하고 있다는 것을 깨달았습니다. 그래서 나는 그에 맞게 예제를 단순화했습니다. – ekhumoro

관련 문제