如何在不使用CSS的情况下更改QPushButton背景颜色

1 投票
2 回答
5331 浏览
提问于 2025-04-18 15:24

到目前为止,我只能自定义按钮的文字颜色:

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)

撰写回答