【发布时间】:2016-06-05 21:39:27
【问题描述】:
我想在不更改/重置整个样式的情况下更改按钮的背景颜色和文本颜色。
目前,我正在使用这个:
dl_btt.setStyleSheet("background-color: green; color: white")
但这会改变按钮的整体风格:
因为默认样式是这样的:
我想要这样的东西:
所以,如果我要更改操作系统,我希望它使用默认样式并且只更改背景颜色。
我可以在不手动复制样式的情况下做到这一点吗?
编辑:
@Controlix 感谢您为我指明了正确的方向。但是,我似乎无法更改背景颜色。
我只能使用以下方法更改边框和文本颜色:
dl_btt = DownloadButton(self, "Skini")
#dl_btt.setStyleSheet("background-color: green; color: white")
#dl_btt.setPalette(QtGui.QPalette(QtCore.Qt.green))
palette = dl_btt.palette()
role = dl_btt.foregroundRole()
palette.setColor(role, QtGui.QColor('white'))
role = dl_btt.backgroundRole()
palette.setColor(role, QtGui.QColor('green'))
dl_btt.setAutoFillBackground(True)
dl_btt.setPalette(palette)
这给了我这个结果:
搜索给了我相同或相似的 sn-ps 代码,但没有按照我的预期执行。
编辑 2:
我放弃了这个搜索并使用了样式表,重新构建了我认为合适的样式。
我仍然想知道......在 PyQt 中,是否有可能在仅更改小部件的某些部分的同时复制原生样式?
编辑 3
我试过了:
palette = dl_btt.palette()
role = dl_btt.foregroundRole()
palette.setColor(role, QtGui.QColor('white'))
role = dl_btt.buttonRole()
palette.setColor(role, QtGui.QColor('green'))
dl_btt.setAutoFillBackground(True)
dl_btt.setPalette(palette)
但是我收到了这个错误:
AttributeError: 'DownloadButton' object has no attribute 'buttonRole'
如何访问按钮角色?怎么称呼?
以防万一,这里是 DownloadButton 类:
class DownloadButton(QtGui.QPushButton):
def __init__(self, master, *args, **kwargs):
super(DownloadButton, self).__init__(*args, **kwargs)
self.master = master
def mousePressEvent(self, ev):
self.master.startDownload()
【问题讨论】:
-
用 QPalette 改变它而不是用 StyleSheet
-
QPalette 有一个按钮角色。我认为这应该可行。
-
好像没有按钮角色。或者我至少找不到一个..