2014-04-05 8 views
5

क्या पहले कॉम्बोबॉक्स आइटम बनाना संभव है, फिर इसके डिस्प्ले गुण (जैसे आइटम का पृष्ठभूमि रंग, आइकन, फ़ॉन्ट रंग, फ़ॉन्ट आकार आदि) सेट करें और केवल इसे कॉम्बोबॉक्स में जोड़ने के लिए Comobobox के .addItem() विधि का उपयोग कर यह अब मैं का उपयोग कर अटक कर रहा हूँ के रूप में:?।पीईक्यूटी: कॉम्बोबॉक्स आइटम को कस्टमाइज़ करने के लिए कैसे करें

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

इस दृष्टिकोण अलग-अलग ComboBox के आइटम गुण प्रदर्शित की अनुकूलन के लिए कम जगह छोड़ देता है कहने की जरूरत नहीं कुछ इस तरह मैं क्या चाहते हैं :

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 के अनुकूलित आइटम का एक कामकाजी उदाहरण है। धन्यवाद Ekhumoro!


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

डिफ़ॉल्ट रूप से, QComboBox एक QStandardItemModel का उपयोग करता है, तो 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) 

पुनश्च:

यदि आप चाहते हैं item properties में से किसी एक को रीसेट करने के लिए, इसे None पर सेट करें, इस तरह :

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

समय पर सही! आपका बहुत बहुत धन्यवाद! – alphanumeric

+0

हम किसी आइटम के अग्रभूमि रंग को डिफ़ॉल्ट "रंग नहीं" पर कैसे रीसेट कर सकते हैं? ... आइटम पहले ही आइटम सेट कर चुका था .setForeground (QtGui.QColor ('red')) इसके डिस्प्ले को रंग से डिफॉल्ट पर स्विच करने की आवश्यकता है और vise versa ... – alphanumeric

+0

@Sputnix। मेरा अद्यतन उत्तर देखें। इसके अलावा: मुझे अभी एहसास हुआ कि 'QComboBox' पहले से ही' QStandardItemModel' का उपयोग करता है, इसलिए मैंने तदनुसार अपना उदाहरण सरल बना दिया है। – ekhumoro

संबंधित मुद्दे