Как изменить цвет текста и фона QPushButton
Я использую следующий код для подключения QMenu
в QPushButton
, При нажатии кнопки отображается выпадающее меню с несколькими элементами подменю.
button=QPushButton()
button.setText("Press Me")
font=QtGui.QFont()
button.setFont(font)
button.setSizePolicy(ToolButtonSizePolicy)
button.setPopupMode(QtGui.QToolButton.InstantPopup)
menu=QtGui.QMenu()
button.setMenu(menu)
menuItem1=menu.addAction('Menu Item1')
menuItem2=menu.addAction('Menu Item2')
Теперь в зависимости от условия я хотел бы настроить QPushButton
отображать, давая ему текст и цвет фона. Следующая строка кода (которая должна изменить цвет фона) не влияет на QPushButton
подключен к QMenu.
button.setStyleSheet('QPushButton {background-color: #A3C1DA}')
Я хотел бы знать, как изменить цвет фона QPushButton
а также цвет текста кнопки.
5 ответов
Помимо некоторых несоответствий с вашим примером кода, установка цвета фона и цвета текста QPushButton
прекрасно работает с:
setStyleSheet('QPushButton {background-color: #A3C1DA; color: red;}')
Пример (с использованием PySide):
from PySide import QtGui
app = QtGui.QApplication([])
button = QtGui.QPushButton()
button.setStyleSheet('QPushButton {background-color: #A3C1DA; color: red;}')
button.setText('Press Me')
menu = QtGui.QMenu()
menuItem1 = menu.addAction('Menu Item1')
menuItem2 = menu.addAction('Menu Item2')
button.setMenu(menu)
button.show()
app.exec_()
результаты в:
Для тех, кто все же хочет изменить цвет кнопки с помощью инструкции
button.setStyleSheet('QPushButton {background-color: #A3C1DA}')
и не можете, просто измените приведенную выше инструкцию на
button.setStyleSheet('QPushButton {background-color: #A3C1DA; border: none}')
И это изменит цвет кнопки, поэтому весь фокус в том, чтобы удалить границу.
Изменить цвет фона , когда мышь находится над кнопкой
self.button.setStyleSheet(
"QPushButton::hover{"
"background-color: #ffd2cf;"
"border: none;"
"}"
)
Вы можете улучшить свою кнопку:
self.button.setToolTip("Hell o World")
self.button.mousePressEvent = lambda v: self.button.setIconSize(QSize(25, 25))#incresing iconsize
self.button.mouseReleaseEvent = lambda v: self.button.setIconSize(QSize(20, 20))#resetting to original iconsize
self.button.setStyleSheet(
"QPushButton::hover{"
"background-color: #ffd2cf;"
"border: none;"
"}"
)
self.button.myIcon = QIcon("c:/users/user-name/Pictures/icons/delete-row.png")
self.button.setIcon(self.button.myIcon)
self.button.setIconSize(QSize(20, 20))#setting original icon size
Вот общийDecorableButton
:
from PySide6.QtWidgets import (QPushButton)
from PySide6.QtGui import (QIcon, QMouseEvent)
from PySide6.QtCore import (Qt, QSize)
class DecButton(QPushButton):
def __init__(self, text: str = None, size: QSize = None, iconPath: str = None,
iconSize: QSize = None, onPressIconSizeIncrease: QSize = None,
onFocusBackgroundColor: str = None, toolTip: str = None, parent=None, color=None):
super().__init__(parent=parent)
##initializing UI
self.initUI(text=text, size=size, iconPath=iconPath,
iconSize=iconSize, onPressIconSizeIncrease=onPressIconSizeIncrease,
onFocusBackgroundColor=onFocusBackgroundColor, toolTip=toolTip, color=color)
pass
def initUI(self, text: str = None, size: QSize = None, iconPath: str = None,
iconSize: QSize = None, onPressIconSizeIncrease: int = None,
onFocusBackgroundColor: str = None, toolTip: str = None, color: str = None):
if text is not None:
self.setText(text)
if size is not None:
self.setFixedSize(size)
if iconPath is not None:
self.buttonIcon = QIcon(iconPath)
self.setIcon(self.buttonIcon)
self.buttonIconSize = iconSize
if iconSize:
self.setIconSize(self.buttonIconSize)
self.onPressIconSizeIncrease = onPressIconSizeIncrease
if onFocusBackgroundColor is not None:
self.setStyleSheet(
"QPushButton::hover{"
f"background-color: {onFocusBackgroundColor};"
"border: none;"
"}"
)
if color is not None:
if onFocusBackgroundColor is None:
self.setStyleSheet(
"QPushButton{"
f"background-color: {color};"
"border: none;"
"}"
)
else:
self.setStyleSheet(
"QPushButton{"
f"background-color: {color};"
"border: none;"
"}"
"QPushButton::hover{"
f"background-color: {onFocusBackgroundColor};"
"border: none;"
"}"
)
self.setToolTip(toolTip)
def mousePressEvent(self, event: QMouseEvent) -> None:
super().mousePressEvent(event)
if self.onPressIconSizeIncrease:
self.setIconSize(self.onPressIconSizeIncrease)
def mouseReleaseEvent(self, event: QMouseEvent) -> None:
super().mouseReleaseEvent(event)
if self.onPressIconSizeIncrease:
self.setIconSize(self.buttonIconSize)
if __name__ == "__main__":
from PySide6.QtWidgets import (QApplication, QWidget, QVBoxLayout, QHBoxLayout)
app = QApplication([])
widget = QWidget()
widget.layout = QHBoxLayout()
widget.button = DecButton(iconPath="c:/users/devpa/Pictures/icons/delete-row.png",
iconSize=QSize(25, 25), onPressIconSizeIncrease=QSize(30, 30),
size=QSize(35, 35), onFocusBackgroundColor='#facdcd', color='#fcf8f7')
widget.layout.addWidget(widget.button)
widget.setLayout(widget.layout)
widget.show()
app.exec()
Окно вывода:
Изменение текста кнопки:
from PyQt5.QtWidgets import QPushButton
button = QPushButton("Some text")
button.setText('New text')
Изменение цвета фона кнопки:
from PyQt5.QtWidgets import QPushButton
button = QPushButton("Some text")
button1.setStyleSheet("background-color: red");
# or
# button2.setStyleSheet("background-color:#ff0000;");
# or
# button3.setStyleSheet("background-color:rgb(255,0,0)");
Я бы добавил комментарий к ответу Trilarions, но недостаточно репутации..
Я смог использовать его предложение, не удаляя границы
self.show()
self.button.setStyleSheet('background-color: red;')
ПОСЛЕ выполнения.show() в моем приложении. не уверен, почему после работ, но не раньше. Если бы кто-нибудь мог объяснить это было бы здорово