如何在不使用CSS的情况下更改QPushButton背景颜色
到目前为止,我只能自定义按钮的文字颜色:
button = QtGui.QPushButton()
palette = QtGui.QPalette(button.palette())
palette.setColor(QtGui.QPalette.ButtonText, QtGui.QColor('blue'))
button.setPalette(palette)
但是我该怎么改变按钮的背景颜色呢?
这些都无法改变按钮的背景颜色:
palette.setColor(QtGui.QPalette.Foreground, QtGui.QColor('red'))
palette.setColor(QtGui.QPalette.Button, QtGui.QColor('red'))
palette.setColor(QtGui.QPalette.Light, QtGui.QColor('red'))
palette.setColor(QtGui.QPalette.Midlight, QtGui.QColor('red'))
palette.setColor(QtGui.QPalette.Dark, QtGui.QColor('red'))
palette.setColor(QtGui.QPalette.Mid, QtGui.QColor('red'))
palette.setColor(QtGui.QPalette.Text, QtGui.QColor('red'))
palette.setColor(QtGui.QPalette.BrightText, QtGui.QColor('red'))
palette.setColor(QtGui.QPalette.ButtonText, QtGui.QColor('red'))
palette.setColor(QtGui.QPalette.Base, QtGui.QColor('red'))
palette.setColor(QtGui.QPalette.Background, QtGui.QColor('red'))
palette.setColor(QtGui.QPalette.Midlight, QtGui.QColor('red'))
palette.setColor(QtGui.QPalette.Shadow, QtGui.QColor('red'))
palette.setColor(QtGui.QPalette.Highlight, QtGui.QColor('red'))
palette.setColor(QtGui.QPalette.HighlightedText, QtGui.QColor('red'))
2 个回答
0
有些QStyle,特别是Windows Vista风格,会从操作系统中获取某些界面的样式,所以你不能直接用QPalette来修改它们。
你可以通过以下方式查看可用的QStyle:
QStyleFactory.keys()
['windowsvista', 'Windows', 'Fusion']
要把qstyle换成其他样式,可以使用:
app.setStyle("Fusion")
这样的话,它就会遵循QPalette的设置了。
QPalette.Button
2
你需要设置正确的“角色”,并添加“setAutoFillBackground()”这个方法:
button = QtGui.QPushButton()
palette = self.button.palette()
role = self.button.backgroundRole() #choose whatever you like
palette.setColor(role, QColor('red'))
button.setPalette(palette)
self.button.setAutoFillBackground(True)