Задать вопрос
@I3EKTOP

Как сбросить Radiobutton в PyQt5?

Всем добрый день! Столкнулся с такой проблемой: пользователь выбирает какой-то вариант из группы Radiobutton'ов, после чего они скрываются (.hide()) и потом через какое-то время они опять показываются( .show()), пользователь опять должен выбрать какую-то кнопку из этой группы, но его прежний выбор должен обнулиться. Пробовал перебрать и выставить .setChecked(False), тогда они действительно сбрасываются, но это происходит при отображении, то есть при прорисовке видно как какую-то долю секунды горящий флажок кнопки погасает. Что можно сделать что бы они показывались второй раз уже обнулёнными?
  • Вопрос задан
  • 2485 просмотров
Подписаться 2 Простой 9 комментариев
Решения вопроса 1
@Andy_U
Что-то непонятное было с вашим кодом: как-то странно кнопки нажимались, radio button'ы не в группе. В общем, мне было проще воспроизвести вид окна в QTDesigner'e и потом скопировать сгерерированный питоновский код прямо в ваш бывший, сделав его классом. Ну и потом добавить вызов btn.setAutoExclusive(False/True) - чтобы сбросить кнопку. А чтобы при показе не мигало, добавить repaint() при Hide. См.ниже:

import sys
from PyQt5 import QtWidgets, QtCore


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(196, 153)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox.setGeometry(QtCore.QRect(10, 10, 81, 111))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth())
        self.groupBox.setSizePolicy(sizePolicy)
        self.groupBox.setTitle("")
        self.verticalLayoutWidget = QtWidgets.QWidget(self.groupBox)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 61, 91))
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.radio_button_1 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        self.verticalLayout.addWidget(self.radio_button_1)
        self.radio_button_2 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        self.verticalLayout.addWidget(self.radio_button_2)
        self.radio_button_3 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        self.verticalLayout.addWidget(self.radio_button_3)
        self.radio_button_4 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        self.verticalLayout.addWidget(self.radio_button_4)
        self.hide_button = QtWidgets.QPushButton(self.centralwidget)
        self.hide_button.setGeometry(QtCore.QRect(100, 20, 75, 23))
        self.show_button = QtWidgets.QPushButton(self.centralwidget)
        self.show_button.setGeometry(QtCore.QRect(100, 50, 75, 23))
        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.radio_button_1.setText(_translate("MainWindow", "One"))
        self.radio_button_2.setText(_translate("MainWindow", "Two"))
        self.radio_button_3.setText(_translate("MainWindow", "Three"))
        self.radio_button_4.setText(_translate("MainWindow", "Four"))
        self.hide_button.setText(_translate("MainWindow", "Hide"))
        self.show_button.setText(_translate("MainWindow", "Show"))


class MyWindow(QtWidgets.QMainWindow, Ui_MainWindow):

    def __init__(self):
        super(MyWindow, self).__init__()
        self.setupUi(self)
        self.hide_button.clicked.connect(self.hide_radio_buttons)
        self.show_button.clicked.connect(self.show_radio_buttons)

    def hide_radio_buttons(self):
        for btn in [self.radio_button_1, self.radio_button_2, self.radio_button_3, self.radio_button_4]:
            btn.setAutoExclusive(False)
            btn.setChecked(False)
            btn.repaint()
            btn.setAutoExclusive(True)
            btn.hide()

    def show_radio_buttons(self):
        for btn in [self.radio_button_1, self.radio_button_2, self.radio_button_3, self.radio_button_4]:
            btn.show()


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec())
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы