2015-10-14 89 views
0

我想为我的QComboBox创建一个项目,它在一行中显示一个字符串和4个像素图(最终用法是让用户可以从颜色方案列表中选择)。在Pyside创建QComboBox的自定义项目

任何人都可以帮我定制QStandardItem以获得这种效果吗?我以为我可以使用这些行来做它,但我没有太多的运气。这是我到目前为止已经试过......

myComboBox = QtGui.QComboBox()  

item = QtGui.QStandardItem() 
item.setRowCount(4) 

colour1 = QtGui.QPixmap(16, 16) 
colour1 .fill(QtGui.QColor("red")) 

colour2 = QtGui.QPixmap(16, 16) 
colour2 .fill(QtGui.QColor("blue")) 

colour3 = QtGui.QPixmap(16, 16) 
colour3 .fill(QtGui.QColor("white")) 

childitem1 = QtGui.QStandardItem(QtGui.QIcon(colour1), "1") 
childitem2 = QtGui.QStandardItem(QtGui.QIcon(colour2), "2") 
childitem3 = QtGui.QStandardItem(QtGui.QIcon(colour3), "3") 

item.setChild(0, childitem1) 
item.setChild(1, childitem2) 
item.setChild(2, childitem3) 

myComboBox.model().appendRow(item) 

但我只是得到了孩子们的空白项目,没有一个是可见的 - 有一个很好的机会,我已经完全误解了这是如何工作:)

回答

1

您必须创建一个QStandarItemModel,将您的项目附加到它,最后,您必须将此模型设置为myComboBox.setModel()的组合框。

像这样的事情

itemModel = QStandardItemModel() 

# create your items as you want 
itemModel.appendRow(your_items) 

myComboBox.setModel(itemModel) 
+0

谢谢您的回复,但不幸的是我没有完全得到我期望的结果。我已经做了这样的: 'itemModel = QtGui.QStandardItemModel() ITEM1 = QtGui.QStandardItem( “1”) ITEM2 = QtGui.QStandardItem( “2”) 项目3 = QtGui.QStandardItem( “3”) itemModel.appendRow([ITEM1,ITEM2,项目3]) myComboBox.setModel(itemModel)' 但结果是一个组合框条目只在它,而不是 “2” 和 “3” 中的第一项为预期 – Nodgers

+0

我想我已经发现了这个问题,Combobox似乎只能一次显示一列,而不是所有3个!我会继续挖掘,看看是否有办法展现更多 – Nodgers

0

我已经设法通过把一个表视图到组合框的这样得到一种半解决办法:

itemModel = QtGui.QStandardItemModel() 

    item1 = QtGui.QStandardItem("1") 
    item2 = QtGui.QStandardItem("2") 
    item3 = QtGui.QStandardItem("3") 

    itemModel.appendRow([item1, item2, item3]) 
    myComboBox.setModel(itemModel) 

    tv = QtGui.QTableView() 
    tv.setModel(itemModel) 
    tv.horizontalHeader().setVisible(False) 
    tv.verticalHeader().setVisible(False) 
    tv.resizeColumnsToContents() 
    tv.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) 

    myComboBox.setView(tv) 

这是不是100%的漂亮但它只是做这个工作!感谢您的帮助。