如何获取或设置QWidget的原生高亮颜色?
问题描述:
我已经创建了一个自定义QWidgetAction
来提供两个菜单选项;一些文字和一个删除图标。如何获取或设置QWidget的原生高亮颜色?
我可以通过样式表中的:hover
轻松控制突出显示颜色,但我不想对颜色进行硬编码。我想为当前环境使用本机颜色。
如何从调色板查询默认值?
我发现QPalette.setColor()
,我希望找到一个类似的QPalette.getColor()
,但这并不存在。
下面是一些示例代码,可以解释我如何应用我的突出显示。
class PreferenceAction(QtGui.QWidgetAction):
def __init__(self, prefFile, parentMenu, *args, **kw):
QtGui.QWidgetAction.__init__(self, parentMenu, *args, **kw)
self.parentMenu = parentMenu
self.prefFile = prefFile
self.prefName = os.path.basename(prefFile)[:-5].replace("_",' ')
myWidget = QtGui.QWidget()
myLayout = QtGui.QHBoxLayout()
myLayout.setSpacing(0)
myLayout.setContentsMargins(0, 0, 0, 0)
myWidget.setLayout(myLayout)
myLabel = ExtendedQLabel(self.prefName)
myIcon = ExtendedQLabel()
myIcon.setPixmap(QtGui.QPixmap(TRASH_ICON))
myLayout.addWidget(myLabel, stretch=1)
myLayout.addWidget(myIcon, stretch=0)
myWidget.setStyleSheet("QWidget:hover { background:#3399ff; color: white;} QWidget { padding: 4px;}")
self.connect(myLabel, QtCore.SIGNAL('clicked()'), self.loadPreference)
self.connect(myIcon, QtCore.SIGNAL('clicked()'), self.deletePreference)
self.setDefaultWidget(myWidget)
def loadPreference(self):
print "loading preference %s" % self.prefFile
self.parentMenu.hide()
def deletePreference(self):
print "deleting preference %s" % self.prefFile
self.parentMenu.hide()
class ExtendedQLabel(QtGui.QLabel):
def __init(self, parent):
QtGui.QLabel.__init__(self, parent)
def mouseReleaseEvent(self, ev):
self.emit(QtCore.SIGNAL('clicked()'))
更新: 我发现这个选项。这不是超级漂亮,但它的作品。
defaultHLBackground = "#%02x%02x%02x" % myWidget.palette().highlight().color().getRgb()[:3]
defaultHLText = "#%02x%02x%02x" % myWidget.palette().highlightedText().color().getRgb()[:3]
myWidget.setStyleSheet("QWidget:hover { background:%s; color: %s;} QWidget { padding: 4px;}" % (defaultHLBackground,defaultHLText))
答
直接在CSS样式中使用的颜色的“名”是这样的:
yourWidget.palette().highlight().color().name()
你已经发现了,有没有getColor()
,只是color()
。 Qt中的API约定与Java和Python中常见的不同。