在 Pyside 中为 QComboBox 创建自定义项

Creating a custom item for QComboBox in Pyside

我想为我的 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)

但我只得到一个空项目,并且 children 中的 none 是可见的 - 很有可能我完全误解了它的工作原理:)

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

像这样

itemModel = QStandardItemModel()

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

myComboBox.setModel(itemModel)

通过将 table 视图放入组合框中,我设法得到了一种半解决方案:

    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% 漂亮,但它几乎可以完成工作!感谢您的帮助。