Стилизация нескольких кнопок одновременно - PullRequest
0 голосов
/ 02 мая 2020

Рассмотрим следующий пример с игрушкой:

from PyQt5 import QtWidgets, QtGui, QtCore

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

        w = QtWidgets.QWidget()
        layout = QtWidgets.QVBoxLayout()
        w.setLayout(layout)
        self.setCentralWidget(w)

        btn1 = QtWidgets.QPushButton("1")
        btn1.setStyleSheet('''QPushButton {background-color : red;}
                              QPushButton:!hover {background-color: grey;}''')

        btn2 = QtWidgets.QPushButton("2")
        btn2.setStyleSheet('QPushButton {background-color : green;}')

        btn3 = QtWidgets.QPushButton("3")
        btn3.setStyleSheet('QPushButton {background-color : blue;}')

        layout.addWidget(btn1)
        layout.addWidget(btn2)
        layout.addWidget(btn3)

        self.show()

app = QtWidgets.QApplication([])
window = MainWindow()
app.exec_()

Как видите, я могу дать указание любой отдельной кнопке оставаться серой, когда мышь не парит над ней, с помощью следующего:

QPushButton:!hover {background-color: grey;}

Мне бы хотелось, чтобы все кнопки в макете оставались серыми, когда я не зависал над виджетом, и меняли их цвет в то же время, когда мышь входит в область виджета.

Я попытался добавить строку ниже, но она не работает:

w.setStyleSheet('QPushButton:!hover {background-color: gray;}')

Что я делаю не так?

1 Ответ

0 голосов
/ 02 мая 2020

Как вариант, попробуйте это:

from PyQt5 import QtWidgets, QtGui, QtCore

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

        w = QtWidgets.QWidget()
        self.setCentralWidget(w)

        btn1 = QtWidgets.QPushButton("1")
        btn2 = QtWidgets.QPushButton("2")
        btn3 = QtWidgets.QPushButton("3")

        layout = QtWidgets.QVBoxLayout(w)
        layout.addWidget(btn1)
        layout.addWidget(btn2)
        layout.addWidget(btn3)


style = """

QPushButton {
    background-color: grey;
}
QPushButton:hover {
    background-color : red;
}
"""


if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    app.setStyleSheet(style)                         # +++
    window = MainWindow()
    window.show()
    app.exec_()

enter image description here


Обновление

from PyQt5 import QtWidgets, QtGui, QtCore

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

        w = QtWidgets.QWidget()
        self.setCentralWidget(w)

        btn1 = QtWidgets.QPushButton("1")
        btn2 = QtWidgets.QPushButton("2")
        btn3 = QtWidgets.QPushButton("3")

        layout = QtWidgets.QVBoxLayout(w)
        layout.addWidget(btn1)
        layout.addWidget(btn2)
        layout.addWidget(btn3)


style = """

QPushButton {
    background-color: grey;
}
QPushButton[text='1']:hover {
    background-color: red;
}
QPushButton[text='2']:hover {
    background-color : green;
}
QPushButton[text='3']:hover {
    background-color : blue;
}
"""


if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    app.setStyleSheet(style)                         # +++
    window = MainWindow()
    window.show()
    app.exec_()

enter image description here


Обновление 2

from PyQt5 import QtWidgets, QtGui, QtCore

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

        self.w = QtWidgets.QWidget()
        self.setCentralWidget(self.w)

        self.w.installEventFilter(self)

        btn1 = QtWidgets.QPushButton("1")
        btn2 = QtWidgets.QPushButton("2")
        btn3 = QtWidgets.QPushButton("3")

        layout = QtWidgets.QVBoxLayout(self.w)
        layout.addWidget(btn1)
        layout.addWidget(btn2)
        layout.addWidget(btn3)

        self.setStyleSheet("""        
            QPushButton[text='1'] {
                background-color: grey;
            }
            QPushButton[text='2'] {
                background-color : grey;
            }
            QPushButton[text='3'] {
                background-color : grey;
            }        
        """) 


    def eventFilter(self, obj, event):
        if event.type() == QtCore.QEvent.Enter:
            self.setStyleSheet("""        
                QPushButton[text='1'] {
                    background-color: red;
                }
                QPushButton[text='2'] {
                    background-color : green;
                }
                QPushButton[text='3'] {
                    background-color : blue;
                }        
            """)      
        if event.type() == QtCore.QEvent.Leave:  
            self.setStyleSheet("""        
                QPushButton[text='1'] {
                    background-color: grey;
                }
                QPushButton[text='2'] {
                    background-color : grey;
                }
                QPushButton[text='3'] {
                    background-color : grey;
                }        
            """)         
        return super(MainWindow, self).eventFilter(obj, event)


if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()

enter image description here

...