Вставка групы кнопок

Мне нужно чтобы после отработки обратного отсчета, высвечивалась не только картинка, а и группа вариантов ответов на месте self.rules.

Вот код программы: `

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


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        
        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)
        app.setStyleSheet("QLabel, QPushButton{font-size: 20pt;}#rules { background-color: #ccffbd;}")      
        
        layout = QVBoxLayout(self)
        lineH1 = QHBoxLayout(self)
        lineH2 = QHBoxLayout(self)
        lineH3 = QHBoxLayout(self)
        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)
        layout.addLayout(lineH1)
        layout.addWidget(self.rules, alignment=Qt.AlignHCenter)
        layout.addLayout(lineH3)

        self.timer = QTimer(self)
        self.timer.timeout.connect(self.update_timer)
        
    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.question.setPixmap(QPixmap("million.png"))
            self.num = 3
            self.rules.hide()
            self.button_start.hide()
            self.button_rules.hide()
            return            
        self.num -= 1        

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

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    app.setStyleSheet("QLabel{font-size: 20pt;}#rules { background-color: #ccffbd;}")
    w = MainWindow()          
    w.setWindowTitle('WindowTitle')    
    w.resize(850, 770)
    w.move(610, 110)
    w.show()                           
    sys.exit(app.exec_())

А вот код группы ответов который надо вставить в прошлую программу, под картинку:

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QLabel, QVBoxLayout, QHBoxLayout, QRadioButton, QGroupBox, QButtonGroup)

# створення додатка і головного вікна
app = QApplication([])
main_win = QWidget()
#створення віджетів головного вікна
main_win.setWindowTitle('Таблиця')
main_win.resize(850, 770)
main_win.move(610, 110)

label = QLabel('Group')

RadioGroupBox = QGroupBox("Варианты ответов") # группа на экране для переключателей с ответами
RadioGroup = QButtonGroup() # а это для группировки переключателей, чтобы управлять их поведением

rbtn_1 = QRadioButton('1')
rbtn_2 = QRadioButton('2')
rbtn_3 = QRadioButton('3')
rbtn_4 = QRadioButton('34')

RadioGroup.addButton(rbtn_1)
RadioGroup.addButton(rbtn_2)
RadioGroup.addButton(rbtn_3)
RadioGroup.addButton(rbtn_4)

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

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

RadioGroupBox.setLayout(layout_ans1)

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

main_win.setLayout(layout)
main_win.show()
app.exec()

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

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

Создайте класс с группой кнопок:

class WindowGroup(QWidget):
    ...

Создайте экземпляр этого класса:

self.windowGroup = WindowGroup()

Вставьте его в менеджер компоновки:

self.layout.addWidget(self.windowGroup, alignment=Qt.AlignHCenter)

main.py

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

# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
class WindowGroup(QWidget):
    def __init__(self):
        super().__init__()
        
        self.label = QLabel('Group')

        self.radioGroupBox = QGroupBox("Варианты ответов") 
        self.radioGroup = QButtonGroup() 

        self.rbtn_1 = QRadioButton('1')
        self.rbtn_2 = QRadioButton('2')
        self.rbtn_3 = QRadioButton('3')
        self.rbtn_4 = QRadioButton('34')

        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(QWidget):
    def __init__(self):
        super().__init__()
        
        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)
# -       app.setStyleSheet("QLabel, QPushButton{font-size: 20pt;}#rules { background-color: #ccffbd;}")      

#       vvvv        
        self.layout = QVBoxLayout(self)                               # + self.layout
#                           vv        
        lineH1 = QHBoxLayout()                                        # ? self
        lineH2 = QHBoxLayout()                                        # ? self
        lineH3 = QHBoxLayout()                                        # ? self
        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.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 {
            font-size: 20pt;
        }
        #rules { 
            background-color: #ccffbd;
        }
    """)
    w = MainWindow()          
    w.setWindowTitle('WindowTitle')    
    w.resize(850, 770)
#    w.move(610, 110)
    w.show()                           
    sys.exit(app.exec_())

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

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

→ Ссылка