在Pysid中为QComboBox创建自定义项

2024-09-27 09:30:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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


Tags: 项目itemfillqtguiqcolorqpixmapqcomboboxqstandarditem
2条回答

通过将表视图放入组合框中,我得到了一种半解决方案,如下所示:

    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%漂亮,但它只是做了工作!谢谢你的帮助。在

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

像这样的东西

itemModel = QStandardItemModel()

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

myComboBox.setModel(itemModel)

相关问题 更多 >

    热门问题