在Pyside中为QComboBox创建自定义项

时间:2015-10-14 11:40:02

标签: python qt pyqt pyside qcombobox

我想为我的QComboBox创建一个项目,该项目连续显示一个字符串和4个像素图(最终用法是用户可以从颜色方案列表中选择)。

任何人都可以帮我定制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)

但我只是得到一个空项目,没有一个孩子可见 - 我很有可能完全误解了它是如何工作的:)

2 个答案:

答案 0 :(得分:1)

您必须创建QStandarItemModel,将项目附加到其中,最后您必须使用myComboBox.setModel()将此模型设置为组合框。

像这样的东西

itemModel = QStandardItemModel()

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

myComboBox.setModel(itemModel)

答案 1 :(得分: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%漂亮,但它只是做了工作!感谢您的帮助。