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