Using a different view with QComboBox
On the PyQt mailing list, Adam W. asked for "A simple way to add another column to QComboBox?". Here is some sample code that does this:
1 import sys 2 from PyQt4.QtCore import Qt, QVariant 3 from PyQt4.QtGui import * 4 5 6 app = QApplication(sys.argv) 7 model = QStandardItemModel() 8 9 items = [("ABC", True), 10 ("DEF", False), 11 ("GHI", False)] 12 13 for text, checked in items: 14 15 text_item = QStandardItem(text) 16 checked_item = QStandardItem() 17 checked_item.setData(QVariant(checked), Qt.CheckStateRole) 18 model.appendRow([text_item, checked_item]) 19 20 view = QTreeView() 21 view.header().hide() 22 view.setRootIsDecorated(False) 23 24 combo = QComboBox() 25 combo.setView(view) 26 combo.setModel(model) 27 combo.show() 28 29 sys.exit(app.exec_())
Note that we set the model on the combo box, not the view.
Some improvements could be made to this code. For example, at small sizes the pop-up doesn't always show both columns. Perhaps the combo box's sizeAdjustPolicy property would help with this.
An alternative way to display custom items in the combo box would be to implement a custom item delegate and set that on the combo box.