Нажимается только один 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())

