Найти - Пользователи
Полная версия: Как правильно закрыть дочернее окна и открыть главное PyQt
Начало » GUI » Как правильно закрыть дочернее окна и открыть главное PyQt
1
gtandrey
Помогите решить вопрос, уже 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()
PEHDOM
PyQT когда видит что нет ни одного видимого окна завершает работу.
Когда вы нажимаете кнопку “кенсл” второе окно закрывается, а первое еще не открыто(например сигнал не дошел еще или первое не успело отрисоваться) Нужно или запретить завершать работу при закрытии всех окон (за это овечает метод setQuitOnLastWindowClosed) но тогда нужно дополнительно прописывать выход из программы, при закрытии главного окна. Или не закрывать второе пока первое не отрисуеться.
вот этого:
 form_main.hide()
....
form_main.show()
...
по хорошему быть не должно внутри классов, класс FormDay не должен знать что гдето есть инстанс FormMain, если ему его явно не передали.
gtandrey
PEHDOM спасибо

я нашёл пример
http://www.cyberforum.ru/python-graphics/thread2182635.html
19.02.2018, 03:22
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB