2015-10-14 90 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%的漂亮但它只是做這個工作!感謝您的幫助。