我想要实现的是在 python 的上下文菜单中显示颜色图标。以便它显示一些用于标记表格的颜色。
这是我想要实现的一个例子。
任何猜测如何做到这一点?
更新 这是我的愿景的更详细版本。
单击标记后,将打开一个带有颜色选项的子菜单。
您可以使用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())