我想要实现的是在python中的上下文菜单中显示颜色图标。这样它就会显示一些用来标记表格的颜色。
这是我想要实现的一个例子。
有什么猜测怎么做?
更新 这是我的愿景的更详细版本。
点击标记后,会打开一个带有颜色选项的子菜单。
答案 0 :(得分:3)
您可以使用QWidgetAction相当轻松地完成此操作。
下面的示例代码使用带有图标的工具按钮作为颜色网格,但还有许多其他小部件可以轻松使用。如果您需要一组不同的颜色,可以重新实现palette
方法。
class ColorAction(QtGui.QWidgetAction):
colorSelected = QtCore.pyqtSignal(QtGui.QColor)
def __init__(self, parent):
QtGui.QWidgetAction.__init__(self, parent)
widget = QtGui.QWidget(parent)
layout = QtGui.QGridLayout(widget)
layout.setSpacing(0)
layout.setContentsMargins(2, 2, 2, 2)
palette = self.palette()
count = len(palette)
rows = count // round(count ** .5)
for row in range(rows):
for column in range(count // rows):
color = palette.pop()
button = QtGui.QToolButton(widget)
button.setAutoRaise(True)
button.clicked[()].connect(
lambda color=color: self.handleButton(color))
pixmap = QtGui.QPixmap(16, 16)
pixmap.fill(color)
button.setIcon(QtGui.QIcon(pixmap))
layout.addWidget(button, row, column)
self.setDefaultWidget(widget)
def handleButton(self, color):
self.parent().hide()
self.colorSelected.emit(color)
def palette(self):
palette = []
for g in range(4):
for r in range(4):
for b in range(3):
palette.append(QtGui.QColor(
r * 255 // 3, g * 255 // 3, b * 255 // 2))
return palette
class ColorMenu(QtGui.QMenu):
def __init__(self, parent):
QtGui.QMenu.__init__(self, parent)
self.colorAction = ColorAction(self)
self.colorAction.colorSelected.connect(self.handleColorSelected)
self.addAction(self.colorAction)
self.addSeparator()
self.addAction('Custom Color...')
def handleColorSelected(self, color):
print(color.name())