Подсветка кнопки с правильным ответом

Надо чтобы, после обратного отсчёта. В группе с вариантами ответов, когда нажималось на правильный (Сміття) подсвечивалось зелёным и оставалось, иначе красным.
На данный момент оно всё подсвечивается красным. И если можно, то чтобы нельзя было поменять вариант ответа.

Вот код:

from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, \
    QLabel, QVBoxLayout, QHBoxLayout, QPushButton, QGroupBox, QButtonGroup, QMainWindow
from PyQt5.QtGui import QPixmap
import webbrowser

class WindowGroup(QWidget):
    def __init__(self):
        super().__init__()
        self.setObjectName('windowgroup')

        self.label = QLabel('<h1 style="color: rgb(185, 255, 0);">Що приказка не радить виносити з хати, щоб не розголошувати сімейні розбрати?</h1>')

        self.radioGroupBox = QGroupBox('') 
        self.radioGroup = QButtonGroup() 

        self.rbtn_1 = QPushButton('А: Сміття')
        self.rbtn_2 = QPushButton('В: Сор')
        self.rbtn_3 = QPushButton('С: Пил')
        self.rbtn_4 = QPushButton('D: Меблі')

        self.radioGroup.addButton(self.rbtn_1)
        self.radioGroup.addButton(self.rbtn_2)
        self.radioGroup.addButton(self.rbtn_3)
        self.radioGroup.addButton(self.rbtn_4)

        layout_ans1 = QHBoxLayout()  
        layout_ans2 = QVBoxLayout()
        layout_ans3 = QVBoxLayout()
        layout_ans2.addWidget(self.rbtn_1) 
        layout_ans2.addWidget(self.rbtn_2)
        layout_ans3.addWidget(self.rbtn_3) 
        layout_ans3.addWidget(self.rbtn_4)

        layout_ans1.addLayout(layout_ans2)
        layout_ans1.addLayout(layout_ans3) 

        self.radioGroupBox.setLayout(layout_ans1)

        layout = QVBoxLayout(self)
        layout.addWidget(self.label, alignment=Qt.AlignCenter)
        layout.addWidget(self.radioGroupBox)


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

        self.centralWidget = QWidget()                                  
        self.centralWidget.setObjectName('centralWidget')          
        self.setCentralWidget(self.centralWidget)  

        self.num = 0

        self.question = QLabel('<h1 style="color: rgb(250, 55, 55);">Правила гри')

        self.rules = QLabel('''Гра "Хто хоче стати мільйонером?" 
\
Ви повинні правильно відповісти на низку питань \
з кількома варіантами відповідей, щоб заробити 3.000.000 грн. \
Всього 15 питань, кожне питання коштує певної суми грошей, \
учасники не мають жодних тимчасових обмежень для надання \
відповіді. Учасники також отримують три види підказок, щоб допомогти собі, \
якщо вони застрягли на конкретному питанні.  
\
Більше ознайомитися з правилами можна, натиснувши на кнопку. 
\
Хай щастить!''')
        self.rules.setObjectName('rules')
        self.rules.setWordWrap(True)    

        self.button_rules = QPushButton('Правила')
        self.button_rules.clicked.connect(lambda: webbrowser.open('https://ru.wwbm.com/rules'))
        self.button_rules.setFixedSize(300,50)


        self.button_start = QPushButton('Почати', clicked=self._start)  
        self.button_start.setFixedSize(300,50)
        
        
        self.layout = QVBoxLayout(self.centralWidget)
        
        lineH1 = QHBoxLayout()
        lineH2 = QHBoxLayout()
        lineH3 = QHBoxLayout()
        lineH1.addWidget(self.question, alignment=Qt.AlignHCenter)
        lineH2.addWidget(self.rules)
        lineH3.addWidget(self.button_rules, alignment=Qt.AlignCenter)
        lineH3.addWidget(self.button_start, alignment=Qt.AlignCenter)
        self.layout.addLayout(lineH1)
        self.layout.addWidget(self.rules, alignment=Qt.AlignHCenter)
        self.layout.addLayout(lineH3)


        
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.update_timer)

        self.windowGroup = WindowGroup()
        
    def update_timer(self):        
        self.question.setText(f'<h1 style="color: rgb(250, 55, 55);">{self.num}</h1>')
        if self.num == 0:
            self.timer.stop()
            self.setStyleSheet("""
                QLabel, QPushButton {
                    font-size: 20pt;
                }
                #rules { 
                    background-color: #ccffbd;
                }
                #windowgroup > QLabel { 
                    font-size: 11pt;
                }
                #windowgroup > QGroupBox { 
                    background-color: #a44500;
                    font-size: 20pt;
                }
                QPushButton {
                    background-color: #D98C00;
                    font-size: 34px;
                }
                QPushButton:hover:pressed {
                    background-color: red;
                    color: #fff;    
                }
                QPushButton:hover {
                    background-color: #0082fc;
                    border: 2px solid #FFA6D5;
                }
                #centralWidget {
                    background-image: url(first.jpg);
                }
            """) 
            self.question.setPixmap(QPixmap("million.png"))
            self.num = 3
            self.rules.hide()
            self.button_start.hide()
            self.button_rules.hide()
            self.layout.addWidget(self.windowGroup, alignment=Qt.AlignHCenter)


            return            
        self.num -= 1        

    def _start(self):
        self.timer.start(1000)
        
        

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    app.setStyleSheet("""
        QLabel, QPushButton{ 
            font-size: 20pt;
        }
        #rules { 
            background-color: #ccffbd;
        }
        #centralWidget {
            background-image: url(first.jpg);
        }

    """)     
    w = MainWindow()          
    w.setWindowTitle('Million')  
    w.resize(1700, 770)
    w.move(150, 110)
    w.show()                           
    sys.exit(app.exec_())

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

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

Как вариант.

Убираем:

...
/* это мы уже убрали vvvvvvvvvvvvvvvvvvvvvvvvvvvv  <------------------  !!!              
                QPushButton:hover:pressed {
                    background-color: red;
                    color: #fff;    
                }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
...

Добавляем:

...
# +++ это мы добавили vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv         # +++
        self.windowGroup.rbtn_1.clicked.connect(self.on_clicked)
        self.windowGroup.rbtn_2.clicked.connect(self.on_clicked)
        self.windowGroup.rbtn_3.clicked.connect(self.on_clicked)
        self.windowGroup.rbtn_4.clicked.connect(self.on_clicked)

    def on_clicked(self):
        sender = self.sender()  
        if sender.text() == 'А: Сміття':  
            sender.setStyleSheet("background-color: green;")                
        else:
            sender.setStyleSheet("background-color: red;")          
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...

Также подправил некоторые ошибки.


import webbrowser
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, \
    QLabel, QVBoxLayout, QHBoxLayout, QPushButton, QGroupBox, \
    QButtonGroup, QMainWindow
from PyQt5.QtGui import QPixmap


class WindowGroup(QWidget):
    def __init__(self):
        super().__init__()
        self.setObjectName('windowgroup')

        self.label = QLabel(
            '<h1 style="color: rgb(185, 255, 0);">Що приказка не радить '\
            'виносити з хати, щоб не розголошувати сімейні розбрати?</h1>')

        self.radioGroupBox = QGroupBox('') 
        self.radioGroup = QButtonGroup() 

        self.rbtn_1 = QPushButton('А: Сміття')
        self.rbtn_2 = QPushButton('В: Сор')
        self.rbtn_3 = QPushButton('С: Пил')
        self.rbtn_4 = QPushButton('D: Меблі')

        self.radioGroup.addButton(self.rbtn_1)
        self.radioGroup.addButton(self.rbtn_2)
        self.radioGroup.addButton(self.rbtn_3)
        self.radioGroup.addButton(self.rbtn_4)

        layout_ans1 = QHBoxLayout()  
        layout_ans2 = QVBoxLayout()
        layout_ans3 = QVBoxLayout()
        layout_ans2.addWidget(self.rbtn_1) 
        layout_ans2.addWidget(self.rbtn_2)
        layout_ans3.addWidget(self.rbtn_3) 
        layout_ans3.addWidget(self.rbtn_4)

        layout_ans1.addLayout(layout_ans2)
        layout_ans1.addLayout(layout_ans3) 

        self.radioGroupBox.setLayout(layout_ans1)

        layout = QVBoxLayout(self)
        layout.addWidget(self.label, alignment=Qt.AlignCenter)
        layout.addWidget(self.radioGroupBox)

# ??? так делать не надо  -->  vvvvvvvvvvv  <-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#class MainWindow(QMainWindow, WindowGroup):
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.centralWidget = QWidget()                                  
        self.centralWidget.setObjectName('centralWidget')          
        self.setCentralWidget(self.centralWidget)  

# ???        self.num = 0
        self.num = 3                                                   # +++
        
        self.question = QLabel(
            '<h1 style="color: rgb(250, 55, 55);">Правила гри')
        self.rules = QLabel('''Гра "Хто хоче стати мільйонером?" 
\
Ви повинні правильно відповісти на низку питань \
з кількома варіантами відповідей, щоб заробити 3.000.000 грн. \
Всього 15 питань, кожне питання коштує певної суми грошей, \
учасники не мають жодних тимчасових обмежень для надання \
відповіді. Учасники також отримують три види підказок, щоб допомогти собі, \
якщо вони застрягли на конкретному питанні.  
\
Більше ознайомитися з правилами можна, натиснувши на кнопку. 
\
Хай щастить!''')
        self.rules.setObjectName('rules')
        self.rules.setWordWrap(True)    

        self.button_rules = QPushButton('Правила')
        self.button_rules.clicked.connect(
            lambda: webbrowser.open('https://ru.wwbm.com/rules'))
        self.button_rules.setFixedSize(300, 50)

        self.button_start = QPushButton('Почати', clicked=self._start)  
        self.button_start.setFixedSize(300, 50)
        
        self.layout = QVBoxLayout(self.centralWidget)
        lineH1 = QHBoxLayout()
        lineH2 = QHBoxLayout()
        lineH3 = QHBoxLayout()
        lineH1.addWidget(self.question, alignment=Qt.AlignHCenter)
        lineH2.addWidget(self.rules)
        lineH3.addWidget(self.button_rules, alignment=Qt.AlignCenter)
        lineH3.addWidget(self.button_start, alignment=Qt.AlignCenter)
        self.layout.addLayout(lineH1)
        
# ???        self.layout.addWidget(self.rules, alignment=Qt.AlignHCenter)
        self.layout.addLayout(lineH2)
        
        self.layout.addLayout(lineH3)
        
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.update_timer)

        self.windowGroup = WindowGroup()

# +++ это мы добавили vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv         # +++
        self.windowGroup.rbtn_1.clicked.connect(self.on_clicked)
        self.windowGroup.rbtn_2.clicked.connect(self.on_clicked)
        self.windowGroup.rbtn_3.clicked.connect(self.on_clicked)
        self.windowGroup.rbtn_4.clicked.connect(self.on_clicked)

    def on_clicked(self):
        sender = self.sender()  
        if sender.text() == 'А: Сміття':  
            sender.setStyleSheet("background-color: green;")                
        else:
            sender.setStyleSheet("background-color: red;")          
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        
    def update_timer(self):
        self.question.setText(
            f'<h1 style="color: rgb(250, 55, 55);">{self.num}</h1>')
        
        if self.num == 0:
            self.timer.stop()
            self.setStyleSheet("""
                QLabel, QPushButton {
                    font-size: 20pt;
                }
                #rules { 
                    background-color: #ccffbd;
                }
                #windowgroup > QLabel { 
                    font-size: 11pt;
                }
                #windowgroup > QGroupBox { 
                    background-color: #a44500;
                    font-size: 20pt;
                }
                QPushButton {
                    background-color: #D98C00;
                    font-size: 34px;
                }
/* это мы уже убрали vvvvvvvvvvvvvvvvvvvvvvvvvvvv  <----------------------  !!!              
                QPushButton:hover:pressed {
                    background-color: red;
                    color: #fff;    
                }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
                QPushButton:hover {
                    background-color: #0082fc;
                    border: 2px solid #FFA6D5;
                }
                #centralWidget {
                    background-image: url(q1366360.png);
                }
            """) 
            self.question.setPixmap(QPixmap("million.png"))
            self.num = 3
            self.rules.hide()
            self.button_start.hide()
            self.button_rules.hide()
            self.layout.addWidget(self.windowGroup, alignment=Qt.AlignHCenter)

            return            
        self.num -= 1        

    def _start(self):
        self.timer.start(1000)
        
        

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    app.setStyleSheet("""
        QLabel, QPushButton{ 
            font-size: 20pt;
        }
        #rules { 
            background-color: #ccffbd;
        }
        #centralWidget {
            background-image: url(q1366360.png);
        }

    """)     
    w = MainWindow()          
    w.setWindowTitle('Million')  
    w.resize(1700, 770)
    w.move(150, 110)
    w.show()                           
    sys.exit(app.exec_())

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

→ Ссылка