Фон кнопки. при наведении на нее. изменяется не так как задумано

При наведении курсора мыши меняется фон только за текстом кнопки, однако границы самой кнопки явно больше.

Почему так происходит, я не разобрался. Мне нужно, чтобы менялся весь фон кнопки, как на второй картинке (однако фон должен быть однотонным).

На скриншоте курсора мыши не видно, однако он находится не на тексте, но в рамках самой кнопки

введите сюда описание изображения

Вот styleSheet кнопки:

QPushButton{
    background: rgba(0, 0,0,0);
    margin: 20, 20, 0, 0
}

QPushButton:hover{
    background:rgba(0, 0, 0,30)
}

main.py

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1028, 892)
        MainWindow.setAutoFillBackground(False)
        MainWindow.setStyleSheet("QWidget{\n"
"    color: white;\n"
"    background: QLinearGradient(x1: 0, y1: 1, \n"
"                            x2: 1, y2: 0, \n"
"                            stop: 0   rgb(170, 85, 255), \n"
"                            stop: 0.5  rgb(117, 83, 255)\n"
"                            stop: 1 rgb(221, 24, 255));\n"
"}")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setContentsMargins(0, -1, -1, -1)
        self.horizontalLayout.setSpacing(0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.pushButton_5.sizePolicy().hasHeightForWidth())
        self.pushButton_5.setSizePolicy(sizePolicy)
        self.pushButton_5.setMinimumSize(QtCore.QSize(0, 0))
        self.pushButton_5.setBaseSize(QtCore.QSize(0, 0))
        self.pushButton_5.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.pushButton_5.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.pushButton_5.setStyleSheet("QPushButton{\n"
"    background: rgba(0,0,0,0);\n"
"    margin: 20,20,0,0\n"
"}\n"
"\n"
"QPushButton:hover{\n"
"    background:rgba(0,0,0,30)\n"
"}")
        self.pushButton_5.setObjectName("pushButton_5")
        self.verticalLayout.addWidget(self.pushButton_5)
        self.pushButton_6 = QtWidgets.QPushButton(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.pushButton_6.sizePolicy().hasHeightForWidth())
        self.pushButton_6.setSizePolicy(sizePolicy)
        self.pushButton_6.setStyleSheet("QPushButton{\n"
"    background: rgba(0, 0,0,0);\n"
"    margin: 20, 20, 0, 0\n"
"}\n"
"\n"
"QPushButton:hover{\n"
"    background:rgba(0, 0, 0,30)\n"
"}")
        self.pushButton_6.setObjectName("pushButton_6")
        self.verticalLayout.addWidget(self.pushButton_6)
        self.pushButton_8 = QtWidgets.QPushButton(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.pushButton_8.sizePolicy().hasHeightForWidth())
        self.pushButton_8.setSizePolicy(sizePolicy)
        self.pushButton_8.setStyleSheet("QPushButton{\n"
"    background: rgba(0, 0,0,0);\n"
"    margin: 20, 20, 0, 0\n"
"}\n"
"\n"
"QPushButton:hover{\n"
"    background:rgba(0, 0, 0,30)\n"
"}")
        self.pushButton_8.setObjectName("pushButton_8")
        self.verticalLayout.addWidget(self.pushButton_8)
        self.pushButton_9 = QtWidgets.QPushButton(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.pushButton_9.sizePolicy().hasHeightForWidth())
        self.pushButton_9.setSizePolicy(sizePolicy)
        self.pushButton_9.setStyleSheet("QPushButton{\n"
"    background: rgba(0, 0,0,0);\n"
"    margin: 20, 20, 0, 0\n"
"}\n"
"\n"
"QPushButton:hover{\n"
"    background:rgba(0, 0, 0,30)\n"
"}")
        self.pushButton_9.setObjectName("pushButton_9")
        self.verticalLayout.addWidget(self.pushButton_9)
        self.frame_2 = QtWidgets.QFrame(self.centralwidget)
        self.frame_2.setStyleSheet("QFrame{\n"
"    background: rgba(0,0,0,0)\n"
"}")
        self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_2.setObjectName("frame_2")
        self.verticalLayout.addWidget(self.frame_2)
        self.horizontalLayout.addLayout(self.verticalLayout)
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setStyleSheet("QFrame{\n"
"    background: rgba(0,0,0,0)\n"
"}")
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.horizontalLayout.addWidget(self.frame)
        self.horizontalLayout.setStretch(0, 1)
        self.horizontalLayout.setStretch(1, 3)
        self.verticalLayout_3.addLayout(self.horizontalLayout)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Адская дрочильня"))
        self.pushButton_5.setText(_translate("MainWindow", "PushButton"))
        self.pushButton_6.setText(_translate("MainWindow", "PushButton"))
        self.pushButton_8.setText(_translate("MainWindow", "PushButton"))
        self.pushButton_9.setText(_translate("MainWindow", "PushButton"))


Ответы (1 шт):

Автор решения: S. Nick

Мне удобнее определять стили в одном месте, поэтому я убрал все setStyleSheet из формы и прописал стили в StyleSheet = """ ... """.

И добавил их так:

app.setStyleSheet(StyleSheet)

main.py

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1028, 892)
        MainWindow.setAutoFillBackground(False)
        '''
# или так ----------------------->v <---- точку видите                   !!! +++
        MainWindow.setStyleSheet(".QWidget{\n"
"    color: white;\n"
"    background: QLinearGradient(x1: 0, y1: 1, \n"
"                            x2: 1, y2: 0, \n"
"                            stop: 0   rgb(170, 85, 255), \n"
"                            stop: 0.5  rgb(117, 83, 255)\n"
"                            stop: 1 rgb(221, 24, 255));\n"
"}")
        '''
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setContentsMargins(0, -1, -1, -1)
        self.horizontalLayout.setSpacing(0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.pushButton_5.sizePolicy().hasHeightForWidth())
        self.pushButton_5.setSizePolicy(sizePolicy)
        self.pushButton_5.setMinimumSize(QtCore.QSize(0, 0))
        self.pushButton_5.setBaseSize(QtCore.QSize(0, 0))
        self.pushButton_5.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.pushButton_5.setLayoutDirection(QtCore.Qt.RightToLeft)
        
        '''
        self.pushButton_5.setStyleSheet("QPushButton{\n"
"    background: rgba(0,0,0,0);\n"
"    margin: 20,20,0,0\n"
"}\n"
"\n"
"QPushButton:hover{\n"
"    background:rgba(0,0,0,30)\n"
"}")
        '''
        self.pushButton_5.setObjectName("pushButton_5")
        self.verticalLayout.addWidget(self.pushButton_5)
        self.pushButton_6 = QtWidgets.QPushButton(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.pushButton_6.sizePolicy().hasHeightForWidth())
        self.pushButton_6.setSizePolicy(sizePolicy)
        '''
        self.pushButton_6.setStyleSheet("QPushButton{\n"
"    background: rgba(0, 0,0,0);\n"
"    margin: 20, 20, 0, 0\n"
"}\n"
"\n"
"QPushButton:hover{\n"
"    background:rgba(0, 0, 0,30)\n"
"}")
        '''
        self.pushButton_6.setObjectName("pushButton_6")
        self.verticalLayout.addWidget(self.pushButton_6)
        self.pushButton_8 = QtWidgets.QPushButton(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.pushButton_8.sizePolicy().hasHeightForWidth())
        self.pushButton_8.setSizePolicy(sizePolicy)
        '''
        self.pushButton_8.setStyleSheet("QPushButton{\n"
"    background: rgba(0, 0,0,0);\n"
"    margin: 20, 20, 0, 0\n"
"}\n"
"\n"
"QPushButton:hover{\n"
"    background:rgba(0, 0, 0,30)\n"
"}")
        '''
        self.pushButton_8.setObjectName("pushButton_8")
        self.verticalLayout.addWidget(self.pushButton_8)
        self.pushButton_9 = QtWidgets.QPushButton(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.pushButton_9.sizePolicy().hasHeightForWidth())
        self.pushButton_9.setSizePolicy(sizePolicy)
        '''
        self.pushButton_9.setStyleSheet("QPushButton{\n"
"    background: rgba(0, 0,0,0);\n"
"    margin: 20, 20, 0, 0\n"
"}\n"
"\n"
"QPushButton:hover{\n"
"    background:rgba(0, 0, 0,30)\n"
"}")
        '''
        self.pushButton_9.setObjectName("pushButton_9")
        self.verticalLayout.addWidget(self.pushButton_9)
        
        self.frame_2 = QtWidgets.QFrame(self.centralwidget)
        '''
        self.frame_2.setStyleSheet("QFrame{\n"
"    background: rgba(0,0,0,0)\n"
"}")
        '''
        self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_2.setObjectName("frame_2")
        self.verticalLayout.addWidget(self.frame_2)
        self.horizontalLayout.addLayout(self.verticalLayout)
        self.frame = QtWidgets.QFrame(self.centralwidget)
        '''
        self.frame.setStyleSheet("QFrame{\n"
"    background: rgba(0,0,0,0)\n"
"}")
        '''
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.horizontalLayout.addWidget(self.frame)
        self.horizontalLayout.setStretch(0, 1)
        self.horizontalLayout.setStretch(1, 3)
        self.verticalLayout_3.addLayout(self.horizontalLayout)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Адская дрочильня"))
        self.pushButton_5.setText(_translate("MainWindow", "PushButton 1"))
        self.pushButton_6.setText(_translate("MainWindow", "PushButton 2"))
        self.pushButton_8.setText(_translate("MainWindow", "PushButton 3"))
        self.pushButton_9.setText(_translate("MainWindow", "PushButton 4"))


StyleSheet = '''

#MainWindow {                                               /* <---- #MainWindow !!! */
    color: white;
    background: QLinearGradient(x1: 0, y1: 1, 
                            x2: 1, y2: 0, 
                            stop: 0   rgb(170, 85, 255), 
                            stop: 0.5  rgb(117, 83, 255)
                            stop: 1 rgb(221, 24, 255));
}


QFrame {
    background: rgba(0, 0, 0, 0);
}
/*  vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv попробуйте раскомментировать шесть строк ниже
#frame {
    background: rgba(0, 220, 0, 150);
}
#frame_2 {
    background: rgba(220, 0, 0, 150);
}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */

QPushButton {
    background: rgba(0, 0, 0, 0);
    margin: 20px, 20px, 0px, 0px;
}

QPushButton:hover {
    background: rgba(0, 0, 0, 30);
    margin: 0px, 0px, 0px, 0px;                             /* <---- !!! +++ */
    color: white;                                           /* <---- !!! +++ */
}
'''


class MainWindow(QtWidgets. QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setStyleSheet(StyleSheet)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка