【发布时间】:2019-09-07 15:42:19
【问题描述】:
我正在构建一个NES tile editor,我想为调色板按钮设置背景颜色。这很好用,
def set_colour(self, colour_idx):
self.colour_idx = colour_idx
bgcolour = NES_PALETTE[colour_idx]
qt_colour = QtGui.QColor(bgcolour)
[r, g, b] = qt_colour.red(), qt_colour.green(), qt_colour.blue()
luminance = (0.2126*r + 0.7152*g + 0.0722*b)/256
textcolour = 'white' if luminance < 0.5 else 'black'
self.setText(f"{colour_idx:0{2}X}")
self.setStyleSheet(f"color: {textcolour}; background-color: {bgcolour};")
在大多数情况下,给我一个非常漂亮的结果。
问题是 Qt 不服从我的系统 GTK2 黑暗主题。当我尝试通过设置 QT_QPA_PLATFORMTHEME=gtk2 环境变量来实现它时,结果看起来像这样:
按钮的颜色似乎都被系统主题覆盖了。
我想也许我可以更加坚持,并通过调用 setPalette 而不是使用 CSS 来确保系统主题不会覆盖我的按钮颜色:
def set_colour(self, colour_idx):
self.colour_idx = colour_idx
bgcolour = NES_PALETTE[colour_idx]
qt_colour = QtGui.QColor(bgcolour)
[r, g, b] = qt_colour.red(), qt_colour.green(), qt_colour.blue()
luminance = (0.2126*r + 0.7152*g + 0.0722*b)/256
textcolour = 'white' if luminance < 0.5 else 'black'
self.setText(f"{colour_idx:0{2}X}")
pal = self.palette()
pal.setColor(QtGui.QPalette.Button, qt_colour)
self.setPalette(pal)
self.setStyleSheet(f"color: {textcolour};")
但这并没有什么不同。这是一个Qt错误吗?难道我做错了什么?我在想也许我需要制作自己的自定义小部件,这样它的颜色就不会被 Qt 主题覆盖,但我想知道是否还有其他解决方案。
编辑:我也尝试定义自己的paintEvent 方法,
def paintEvent(self, event):
super().paintEvent(event)
self.setAutoFillBackground(True)
bgcolour = NES_PALETTE[self.colour_idx]
qt_colour = QtGui.QColor(bgcolour)
palette = self.palette()
palette.setColor(QtGui.QPalette.Background, qt_colour)
self.setPalette(palette)
是 GTK+ 是绘制按钮的问题吗?
【问题讨论】:
-
我没有答案,但是如果按钮后面的颜色确实反映了按钮的含义,那么颜色选择器很棒。
-
@DavidCulbreth 是的,当然,按钮的颜色显示了您要为瓷砖的 4 色调色板选择什么颜色。索引是 NES 能够显示的 6 位颜色索引,有一些重复(许多 NES 颜色索引映射到黑色)。