Нажимается только один RadioButton, а остальные нет

После главного меню (настроена только кнопка "Выход" и "Легкий уровень") появляются 4 радио кнопки, но нажимается из них только одна, остальные не работают.

Прикладываю файл ui https://drive.google.com/file/d/1iIBQy4OIIBZy1jDc7KPAFan87AZDXEWg/view?usp=sharing

import sys
from PyQt5 import uic, QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow, QRadioButton, QLabel, QVBoxLayout, QHBoxLayout, QWidget, QLabel, QPushButton,QButtonGroup
import cgitb

cgitb.enable(format='text')


class MyWidget(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('glmen.ui', self)
        self.otvleg = ["Каталог", "Файл"]
        self.pushButton.clicked.connect(self.exit)
        self.pushButton_4.clicked.connect(self.legk)
        self.n = 0
        self.otvet = QPushButton("Подтвердить ответ", self)
        self.otvet.resize(250,50)
        self.otvet.move(250,400)
        self.otvet.setVisible(False)
        self.ans1 = QRadioButton('Каталог', self)
        self.ans1.resize(100, 200)
        self.ans1.move(250, 100)
        self.ans1.setVisible(False)
        self.ans2 = QRadioButton('Консоль', self)
        self.ans2.resize(100, 200)
        self.ans2.move(250, 150)
        self.ans2.setVisible(False)
        self.ans3 = QRadioButton('Фаервол', self)
        self.ans3.resize(100, 200)
        self.ans3.move(250, 200)
        self.ans3.setVisible(False)
        self.ans4 = QRadioButton('Дисковод', self)
        self.ans4.resize(100, 200)
        self.ans4.move(250, 250)
        self.ans4.setVisible(False)
        self.btn_group = QButtonGroup(self)
        self.btn_group.addButton(self.ans1)
        self.btn_group.addButton(self.ans2)
        self.btn_group.addButton(self.ans3)
        self.btn_group.addButton(self.ans4)
        self.s = 0
        self.count = 0
        self.otvleg = ["Как называется группа файлов, которая хранится отдельной группой и имеет собственное имя ?"]
        self.varleg = ['Каталог']
        self.varleg2 = ['Каталог']
        self.varleg3 = ['Каталог']
        self.varleg4 = ['Каталог']
        self.btn_group.buttonClicked.connect(self.radio)

    def legk(self):
        self.pushButton_3.deleteLater()
        self.pushButton_2.deleteLater()
        self.pushButton_4.deleteLater()
        self.pushButton.deleteLater()
        self.ans1.setVisible(True)
        self.ans2.setVisible(True)
        self.ans3.setVisible(True)
        self.ans4.setVisible(True)
        self.otvet.setVisible(True)
        if self.n in self.otvleg:
            self.count += 1
        if self.s == len(self.otvleg):
            self.ans1.deleteLater()
            self.ans2.deleteLater()
            self.ans3.deleteLater()
            self.ans4.deleteLater()
            self.otvet.setText("OK")
            self.label.setText(f"Ваш результат {self.count} из 7")
        else:
            self.label.setText(self.otvleg[self.s])
            self.ans1.setText(self.varleg[self.s])
            self.ans2.setText(self.varleg2[self.s])
            self.ans3.setText(self.varleg3[self.s])
            self.ans4.setText(self.varleg4[self.s])
            self.s += 1

    def radio(self):
        self.n = self.btn_group.checkedButton().text()

    def exit(self):
        app = QApplication(sys.argv)
        ex = MyWidget()
        ex.show()
        sys.exit(app.exec())



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

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

Когда вы задаете

self.ansX.resize(..., 200)

вы последним QRadioButton перекрываете все предыдущие.

Научитесь использовать менеджеры компоновки и избежите таких ошибок, которые не просто найти.

Подход, который вы выбрали, показывать/не показывать/удалять виджеты не очень хорош. Посмотрите в сторону QStackedWidget

import sys
from PyQt5 import uic, QtCore, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QRadioButton, \
    QLabel, QVBoxLayout, QHBoxLayout, QWidget, QLabel, QPushButton, \
    QButtonGroup
#import cgitb
#cgitb.enable(format='text')


class MyWidget(QMainWindow):
    def __init__(self):
        super().__init__()
        
        uic.loadUi('glmen.ui', self)
        
        self.label.setWordWrap(True)                                 # +++
        
        self.otvleg = ["Каталог", "Файл"]
                
        self.pushButton.clicked.connect(self.exit)
        self.pushButton_4.clicked.connect(self.legk)
        
        self.n = 0
        self.otvet = QPushButton("Подтвердить ответ", self)
        self.otvet.clicked.connect(self.otvet_clicked)               # +++
        self.otvet.resize(250, 50)
        self.otvet.move(250, 400)
        self.otvet.setVisible(False)
        
        self.ans1 = QRadioButton('ans1', self)
# --------------------------> vvv <-----------------------------------------
#       self.ans1.resize(100, 200)
        self.ans1.resize(100, 30)                                     # +++
        self.ans1.move(250, 170)                                      # +++
        self.ans1.setVisible(False)
        
        self.ans2 = QRadioButton('ans2', self)
        self.ans2.resize(100, 30)                                     # +++
        self.ans2.move(250, 220)                                      # +++
        self.ans2.setVisible(False)
        
        self.ans3 = QRadioButton('ans3', self)
        self.ans3.resize(100, 30)                                     # +++
        self.ans3.move(250, 270)                                      # +++
        self.ans3.setVisible(False)
        
        self.ans4 = QRadioButton('ans4', self)
        self.ans4.resize(100, 30)                                     # +++
        self.ans4.move(250, 320)                                      # +++
        self.ans4.setVisible(False)
        self.ans4.setStyleSheet("background-color: #f0f;")            # +++
        
        self.btn_group = QButtonGroup(self)
        self.btn_group.addButton(self.ans1)
        self.btn_group.addButton(self.ans2)
        self.btn_group.addButton(self.ans3)
        self.btn_group.addButton(self.ans4)

        self.s = 0
        self.count = 0
        self.otvleg = ["Как называется группа файлов, которая хранится "
                       "отдельной группой и имеет собственное имя ?"]

        self.varleg = ['Каталог 1']
        self.varleg2 = ['Каталог 2']
        self.varleg3 = ['Каталог 3']
        self.varleg4 = ['Каталог 4']
        
        self.btn_group.buttonClicked.connect(self.radio)

    def legk(self):
        self.pushButton_3.deleteLater()
        self.pushButton_2.deleteLater()
        self.pushButton_4.deleteLater()
        self.pushButton.deleteLater()
        
        self.ans1.setVisible(True)
        self.ans2.setVisible(True)
        self.ans3.setVisible(True)
        self.ans4.setVisible(True)
        self.otvet.setVisible(True)
        
        if self.n in self.otvleg:
            self.count += 1
            
        if self.s == len(self.otvleg):
            self.ans1.deleteLater()
            self.ans2.deleteLater()
            self.ans3.deleteLater()
            self.ans4.deleteLater()
            self.otvet.setText("OK")
            self.label.setText(f"Ваш результат {self.count} из 7")
        else:
            self.label.setText(self.otvleg[self.s])
            
            self.ans1.setText(self.varleg[self.s])
            self.ans2.setText(self.varleg2[self.s])
            self.ans3.setText(self.varleg3[self.s])
            self.ans4.setText(self.varleg4[self.s])
            
            self.s += 1

# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv            
    def radio(self, button):
        #print(f'button = {button.text()}') 
#        self.n = self.btn_group.checkedButton().text()
        self.n = button.text()
        print(f'self.n = {self.n}') 

    def exit(self):
        self.close()

    def otvet_clicked(self):        
        print(f'\notvet_clicked(self):  {self.n}') #
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

        
if __name__ == "__main__":                     
    app = QtWidgets.QApplication(sys.argv)
    w = MyWidget()
    w.show()
    sys.exit(app.exec())

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

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

→ Ссылка