Уведомления

Группа в Telegram: присоединиться

#1 Ноя. 18, 2020 11:01:32

Pacifist
Зарегистрирован: 2020-01-10
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

QtWidgets.QInputDialog и Radiobutton

Подскажите, есть в QtWidgets.QInputDialog метод, что бы вызвать диалоговое окно с радио кнопками как по аналогии с выпадающим списком в примере?

 from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(517, 227)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.toolButton = QtWidgets.QToolButton(self.centralwidget)
        self.toolButton.setGeometry(QtCore.QRect(80, 30, 25, 19))
        self.toolButton.setObjectName("toolButton")
        self.toolButton_2 = QtWidgets.QToolButton(self.centralwidget)
        self.toolButton_2.setGeometry(QtCore.QRect(80, 100, 25, 19))
        self.toolButton_2.setObjectName("toolButton_2")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(160, 40, 47, 13))
        self.label.setStyleSheet("background-color: rgb(170, 255, 127);")
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(150, 100, 47, 13))
        self.label_2.setStyleSheet("background-color: rgb(255, 255, 127);")
        self.label_2.setObjectName("label_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.toolButton.setText(_translate("MainWindow", "..."))
        self.toolButton_2.setText(_translate("MainWindow", "..."))
        self.label.setText(_translate("MainWindow", "TextLabel"))
        self.label_2.setText(_translate("MainWindow", "TextLabel"))
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)
    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))
app = QtWidgets.QApplication([])
application = Proba()
application.show()
sys.exit(app.exec())

Офлайн

#2 Ноя. 18, 2020 16:24:47

DOOMer
От: Russia.MO.Balashikha
Зарегистрирован: 2013-01-09
Сообщения: 35
Репутация: +  9  -
Профиль   Отправить e-mail  

QtWidgets.QInputDialog и Radiobutton

QInputDialog поддерживает только простой текстовый ввод через QLineEdit и выбор из списка через QComboBox.

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

Офлайн

#3 Ноя. 20, 2020 12:43:09

Pacifist
Зарегистрирован: 2020-01-10
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

QtWidgets.QInputDialog и Radiobutton

DOOMer
QInputDialog поддерживает только простой текстовый ввод через QLineEdit и выбор из списка через QComboBox. То что вы хотите, вполне несложно реализовать самому, отнаслодовавшись от класса QDialog.
Спасибо! Подскажите, пожалуйста, как из второго окна (класс Proba_2 функция ok_butt) передать значение (в моем случае переменная ss) в первое окно (класс Proba, label_2) по нажатию кнопки Ок во втором окне с его закрытием?
 from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(517, 227)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.toolButton = QtWidgets.QToolButton(self.centralwidget)
        self.toolButton.setGeometry(QtCore.QRect(80, 30, 25, 19))
        self.toolButton.setObjectName("toolButton")
        self.toolButton_2 = QtWidgets.QToolButton(self.centralwidget)
        self.toolButton_2.setGeometry(QtCore.QRect(80, 100, 25, 19))
        self.toolButton_2.setObjectName("toolButton_2")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(160, 40, 120, 13))
        self.label.setStyleSheet("background-color: rgb(170, 255, 127);")
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(150, 100, 120, 13))
        self.label_2.setStyleSheet("background-color: rgb(255, 255, 127);")
        self.label_2.setObjectName("label_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.toolButton.setText(_translate("MainWindow", "..."))
        self.toolButton_2.setText(_translate("MainWindow", "..."))
        self.label.setText(_translate("MainWindow", "Выпадающий список"))
        self.label_2.setText(_translate("MainWindow", "Радио кнопки"))
class Ui_MainWindow_2(object):
    def setupUi_2(self, MainWindow_2):
        MainWindow_2.setObjectName("MainWindow_2")
        MainWindow_2.resize(400, 250)
        self.centralwidget_1 = QtWidgets.QWidget(MainWindow_2)
        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(MainWindow_2)
        self.statusbar.setObjectName("statusbar")
        MainWindow_2.setStatusBar(self.statusbar)
        self.retranslateUi(MainWindow_2)
        QtCore.QMetaObject.connectSlotsByName(MainWindow_2)
    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"))
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()
class Proba_2(QtWidgets.QMainWindow):
    def __init__(self):
        super(Proba_2, self).__init__()
        self.ui_2 = Ui_MainWindow_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)
    def updateLabel(self):
        global ss
        rbtn = self.sender()
        if rbtn.isChecked():
            if rbtn.text() == '1':
                self.ui_2.label.setText('Один')
                ss = 'Один'
            elif rbtn.text() == '2':
                self.ui_2.label.setText('Два')
                ss = 'Два'
            elif rbtn.text() == '3':
                self.ui_2.label.setText('Три')
                ss = 'Три'
            elif rbtn.text() == '4':
                self.ui_2.label.setText('Четыре')
                ss = 'Четыре'
        return ss
    def ok_butt(self):
        print(ss)
app = QtWidgets.QApplication([])
application = Proba()
application.show()
sys.exit(app.exec())

Офлайн

#4 Ноя. 20, 2020 16:04:47

Pacifist
Зарегистрирован: 2020-01-10
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

QtWidgets.QInputDialog и Radiobutton

вот так вроде должно бы работать, но нет

     def ok_butt(self):
        self.aa = Proba()
        self.aa.ui.label_2.setText(ss)
        self.close()
        print(ss)

Офлайн

#5 Ноя. 20, 2020 16:18:27

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 7724
Репутация: +  542  -
Профиль   Отправить e-mail  

QtWidgets.QInputDialog и Radiobutton

Pacifist
вот так вроде должно бы работать
Да как же оно будет работать? Вы создали объект класса Proba, установили ему какие-то свойства, но ведь это не тот объект, который вы создали ранее application = Proba(). Вам надо при создании объекта Proba_2 передать ему в конструктор объект application, сохранить его в свойстве и уже дальше работать с этим свойством.



Офлайн

#6 Ноя. 20, 2020 16:33:30

DOOMer
От: Russia.MO.Balashikha
Зарегистрирован: 2013-01-09
Сообщения: 35
Репутация: +  9  -
Профиль   Отправить e-mail  

QtWidgets.QInputDialog и Radiobutton

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).

 self.ss = None

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)

Отредактировано DOOMer (Ноя. 20, 2020 16:34:45)

Офлайн

#7 Ноя. 25, 2020 14:00:43

Pacifist
Зарегистрирован: 2020-01-10
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

QtWidgets.QInputDialog и Radiobutton

Подскажите, пожалуйста, на что влияет указание класса Proba и self в функции super? В каких-то примерах, класс указывается, в каких-то нет

 super(Proba_2, self).__init__()

Офлайн

#8 Ноя. 25, 2020 14:51:36

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 7724
Репутация: +  542  -
Профиль   Отправить e-mail  

QtWidgets.QInputDialog и Radiobutton

это для совместимости со вторым питоном
синтаксис без self работает только в третьем, во втором self должен присутствовать



Отредактировано FishHook (Ноя. 25, 2020 14:52:24)

Офлайн

#9 Ноя. 25, 2020 19:39:23

Pacifist
Зарегистрирован: 2020-01-10
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

QtWidgets.QInputDialog и Radiobutton

Есть еще вопрос: вывел выпадающий список из QtWidgets.QInputDialog в отдельное окно диалога (мне сложно в QInputDialog настроить стиль). При открытии диалогового окна с выпадающим списком в comboBox сразу стоит значение (Spring), но оно не передается по нажатию Ок (нужно выбрать что-то иное, потом Spring). Можно сделать, что бы сразу можно было выбрать первое (дефолтное) значение, не раскрывая список?

 from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(517, 227)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.toolButton = QtWidgets.QToolButton(self.centralwidget)
        self.toolButton.setGeometry(QtCore.QRect(80, 30, 25, 19))
        self.toolButton.setObjectName("toolButton")
        self.toolButton_2 = QtWidgets.QToolButton(self.centralwidget)
        self.toolButton_2.setGeometry(QtCore.QRect(80, 100, 25, 19))
        self.toolButton_2.setObjectName("toolButton_2")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(160, 40, 120, 13))
        self.label.setStyleSheet("background-color: rgb(170, 255, 127);")
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(150, 100, 120, 13))
        self.label_2.setStyleSheet("background-color: rgb(255, 255, 127);")
        self.label_2.setObjectName("label_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.toolButton.setText(_translate("MainWindow", "..."))
        self.toolButton_2.setText(_translate("MainWindow", "..."))
        self.label.setText(_translate("MainWindow", "Выпадающий список"))
        self.label_2.setText(_translate("MainWindow", "Радио кнопки"))
class Ui_Dialog_1(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(400, 300)
        self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
        self.buttonBox.setGeometry(QtCore.QRect(30, 240, 341, 32))
        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel | QtWidgets.QDialogButtonBox.Ok)
        self.buttonBox.setObjectName("buttonBox")
        self.comboBox = QtWidgets.QComboBox(Dialog)
        self.comboBox.setGeometry(QtCore.QRect(60, 70, 221, 22))
        self.comboBox.setObjectName("comboBox")
        self.retranslateUi(Dialog)
        self.buttonBox.accepted.connect(Dialog.accept)
        self.buttonBox.rejected.connect(Dialog.reject)
        QtCore.QMetaObject.connectSlotsByName(Dialog)
    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
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, Ui_Dialog_2):
        _translate = QtCore.QCoreApplication.translate
        Ui_Dialog_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"))
class Proba(QtWidgets.QMainWindow):
    def __init__(self):
        super().__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):
        self.application_1 = Proba_1()
        result = self.application_1.exec()
        if result == QtWidgets.QDialog.Accepted:
            self.ui.label.setText(str(self.application_1.zdan))
    def setItem_2(self):
        self.application_2 = Proba_2()
        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_1(QtWidgets.QDialog):
    def __init__(self):
        super().__init__()
        self.ui_2 = Ui_Dialog_1()
        self.ui_2.setupUi(self)
        self.ui_2.comboBox.addItems(["Spring", "Summer", "Fall", "Winter"])
        self.ui_2.comboBox.currentIndexChanged[str].connect(self.vyb_zdan)
        self.ui_2.buttonBox.clicked.connect(self.accept)
        self.zdan = None
    def vyb_zdan(self, item):
        self.zdan = item
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
        # 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 = 'Четыре'
app = QtWidgets.QApplication([])
application = Proba()
application.show()
sys.exit(app.exec())

Офлайн

#10 Ноя. 26, 2020 01:02:45

DOOMer
От: Russia.MO.Balashikha
Зарегистрирован: 2013-01-09
Сообщения: 35
Репутация: +  9  -
Профиль   Отправить e-mail  

QtWidgets.QInputDialog и Radiobutton

В методе __init__ у диалога

 self.zdan = None
а значение свойства currentIndex у QComboBox выставляется в 0 автоматом выбирается энудевой элемент, без генерации сигнала об изменении текущего индекса и соотвественно вызовал слота.

Присвойте сразу переменной
 self.zdan
нужное значние в методе инициализации диалога, совпадающее с текстом нужного )нулевого) элемента списка - и всё.

Отредактировано DOOMer (Ноя. 26, 2020 01:03:13)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version