Pacifist
Подскажите, пожалуйста, как из второго окна (класс Proba_2 функция ok_butt) передать значение (в моем случае переменная ss) в первое окно (класс Proba, label_2) по нажатию кнопки Ок во втором окне с его закрытием?
1. Диалог с радио-кнопками у вас наследуется от QMainWindow - в принципе так можно, но лучше его наследовать от класса QDialog, который предназначен именно для создания разного рода диалогов. Делать все окна “главными”, не лучшая практика. Соответственно вот так будет выглядеть ваш класс UI для диалога:
class Ui_Dialog_2(object):
def setupUi_2(self, Dialog2):
Dialog2.setObjectName("MainWindow_2")
Dialog2.resize(400, 250)
self.centralwidget_1 = QtWidgets.QWidget(Dialog2)
self.centralwidget_1.setObjectName("centralwidget")
self.radioButton = QtWidgets.QRadioButton(self.centralwidget_1)
self.radioButton.setGeometry(QtCore.QRect(90, 80, 82, 17))
self.radioButton.setObjectName("radioButton")
self.radioButton_2 = QtWidgets.QRadioButton(self.centralwidget_1)
self.radioButton_2.setGeometry(QtCore.QRect(90, 110, 82, 17))
self.radioButton_2.setObjectName("radioButton_2")
self.radioButton_3 = QtWidgets.QRadioButton(self.centralwidget_1)
self.radioButton_3.setGeometry(QtCore.QRect(90, 150, 82, 17))
self.radioButton_3.setObjectName("radioButton_3")
self.radioButton_4 = QtWidgets.QRadioButton(self.centralwidget_1)
self.radioButton_4.setGeometry(QtCore.QRect(90, 190, 82, 17))
self.radioButton_4.setObjectName("radioButton_4")
self.pushButton = QtWidgets.QPushButton(self.centralwidget_1)
self.pushButton.setGeometry(QtCore.QRect(150, 120, 75, 23))
self.pushButton.setObjectName("ок")
self.label = QtWidgets.QLabel(self.centralwidget_1)
self.label.setGeometry(QtCore.QRect(150, 70, 61, 16))
self.label.setStyleSheet("background-color: rgb(170, 255, 127);")
# MainWindow_2.setCentralWidget(self.centralwidget_1)
self.statusbar = QtWidgets.QStatusBar(Dialog2)
self.statusbar.setObjectName("statusbar")
# Dialog2.setStatusBar(self.statusbar)
self.retranslateUi(Dialog2)
QtCore.QMetaObject.connectSlotsByName(Dialog2)
def retranslateUi(self, MainWindow_2):
_translate = QtCore.QCoreApplication.translate
MainWindow_2.setWindowTitle(_translate("MainWindow_2", "MainWindow"))
self.radioButton.setText(_translate("MainWindow_2", "1"))
self.radioButton_2.setText(_translate("MainWindow_2", "2"))
self.radioButton_3.setText(_translate("MainWindow_2", "3"))
self.radioButton_4.setText(_translate("MainWindow_2", "4"))
self.pushButton.setText(_translate("MainWindow_2", "ok"))
2. В метод def __init__(self) класса Proba2 добавьте переменную для хранения результата выбора радиокнопки (и используй её вменсто глобальной переменной ss, которая у тебя в методе updateLabel).
2. У класса QDialog (и его наследников) имеются встроенные методы accept() и reject(), которые используются для возвращения результат Accepted (зменения принияты успешно) и Rejected (изменения не принимаем). Отображем диалог с помощью вызова метода exec(), который как раз и вернёт значение QDailog.Accepted или QDialog.Rejected в зависимости от того закрываем мы диалог свызовом метода accept() или reject(). Ну и в зависимости от того какое значение вернулось, можно дергать те или иные свойства и метода созданного диалога.
Собственно вот пример вашего кода, переработанного с использованием QDialog для класса Proba_2 (старый неиспользуемый код закомментирован)
class Proba(QtWidgets.QMainWindow):
def __init__(self):
super(Proba, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.toolButton.clicked.connect(self.setItem)
self.ui.toolButton_2.clicked.connect(self.setItem_2)
def setItem(self):
items = {"Spring", "Summer", "Fall", "Winter"}
item, ok = QtWidgets.QInputDialog.getItem(self, "QInputDialog.getItem()",
"Season:", items, 0, False)
if ok and item:
self.ui.label.setText(str(item))
def setItem_2(self):
self.application_2 = Proba_2()
# self.application_2.show()
result = self.application_2.exec()
if result == QtWidgets.QDialog.Accepted and self.application_2.ss is not None:
print(self.application_2.ss)
self.ui.label_2.setText(self.application_2.ss)
# class Proba_2(QtWidgets.QMainWindow):
class Proba_2(QtWidgets.QDialog):
def __init__(self):
super(Proba_2, self).__init__()
self.ui_2 = Ui_Dialog_2()
self.ui_2.setupUi_2(self)
self.ui_2.radioButton.toggled.connect(self.updateLabel)
self.ui_2.radioButton_2.toggled.connect(self.updateLabel)
self.ui_2.radioButton_3.toggled.connect(self.updateLabel)
self.ui_2.radioButton_4.toggled.connect(self.updateLabel)
# self.ui_2.pushButton.clicked.connect(self.ok_butt)
self.ui_2.pushButton.clicked.connect(self.accept)
self.ss = None
def updateLabel(self):
# global ss
rbtn = self.sender()
if rbtn.isChecked():
if rbtn.text() == '1':
self.ui_2.label.setText('Один')
self.ss = 'Один'
elif rbtn.text() == '2':
self.ui_2.label.setText('Два')
self.ss = 'Два'
elif rbtn.text() == '3':
self.ui_2.label.setText('Три')
self.ss = 'Три'
elif rbtn.text() == '4':
self.ui_2.label.setText('Четыре')
self.ss = 'Четыре'
# def ok_butt(self) -> (str, bool):
# print(self.ss)