Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Как правильно закрыть дочернее окна и открыть главное PyQt [RSS Feed]

#1 Янв. 14, 2019 19:16:24

gtandrey
Зарегистрирован: 2019-01-14
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Как правильно закрыть дочернее окна и открыть главное PyQt

Помогите решить вопрос, уже 3 дня ищу решение
Есть Главная форма на ней кнопка, чтобы открыть второе окно с настройками и скрыть главную форму
Во втором окне есть 2 кнопки отмена и применить
соответственно они закрывают второе окно и открывают главное
но к сожалению при нажатии кнопки cancel во втором окне закрывается и главное и второе окно

 import sys
from form_main import *
from form_day import *
from PyQt5 import QtCore, QtGui, QtWidgets
class FormMain(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = Ui_form_main()
        self.ui.setupUi(self)
        self.ui.ButtonDay.clicked.connect(self.show_form_day)
    def show_form_day(self): 
        self.form_day = FormDay(self) 
        self.form_day.show()
class FormDay(QtWidgets.QMainWindow): 
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.form_day = Ui_form_day()
        self.form_day.setupUi(self)
	#... настройки
        form_main.hide()
if __name__=="__main__":
    app = QtWidgets.QApplication(sys.argv)
    form_main = FormMain()
    form_main.show()
    sys.exit(app.exec_())

второе окно

 from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_form_day(object):
    def setupUi(self, form_day):
        form_day.setObjectName("form_day")
        form_day.resize(1024, 600)
        self.centralwidget = QtWidgets.QWidget(form_day)
	self.ButtonCancel.setFont(font)
	self.ButtonCancel.setStyleSheet("")
	self.ButtonCancel.setObjectName("ButtonCancel")
	#....
	self.ButtonCancel.clicked.connect(self.push_button_cancel)
	self.ButtonApply.clicked.connect(self.push_button_apply)
    def push_button_cancel(self):
        print('cancel')
        form_main.show()
        self.hide()

Офлайн

#2 Янв. 15, 2019 11:20:11

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как правильно закрыть дочернее окна и открыть главное PyQt

PyQT когда видит что нет ни одного видимого окна завершает работу.
Когда вы нажимаете кнопку “кенсл” второе окно закрывается, а первое еще не открыто(например сигнал не дошел еще или первое не успело отрисоваться) Нужно или запретить завершать работу при закрытии всех окон (за это овечает метод setQuitOnLastWindowClosed) но тогда нужно дополнительно прописывать выход из программы, при закрытии главного окна. Или не закрывать второе пока первое не отрисуеться.
вот этого:

 form_main.hide()
....
form_main.show()
...
по хорошему быть не должно внутри классов, класс FormDay не должен знать что гдето есть инстанс FormMain, если ему его явно не передали.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Янв. 15, 2019 11:20:41)

Офлайн

#3 Янв. 16, 2019 17:35:05

gtandrey
Зарегистрирован: 2019-01-14
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Как правильно закрыть дочернее окна и открыть главное PyQt

PEHDOM спасибо

я нашёл пример
http://www.cyberforum.ru/python-graphics/thread2182635.html
19.02.2018, 03:22

Офлайн

  • Начало
  • » GUI
  • » Как правильно закрыть дочернее окна и открыть главное PyQt[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version