• Как создать новое окно в PyQt5?

    @Sergey6661313
    причина: переменная new_window умирает сразу как заканчивается функция new_form() (почему? во славу Сатаны конечно!)
    Пути решения:

    1) создать какую нибудь глобальную переменную. Но глобальные переменные это плохой тон (незнаю почему) :
    new_window = None
    def new_form():   
        global new_window
        new_window = uic.loadUi("interface2.ui")
        new_window.setWindowTitle("New form")
        new_window.show()


    2) создать переменную глобальный массив окон (так делаю я - это всё ещё "плохой тон" но зато потом можно циклом разом удалить все создаваемые окна например...) :
    мой_список_окон = []
    def new_form():   
        global мой_список_окон
        new_window = uic.loadUi("interface2.ui")
        new_window.setWindowTitle("New form")
        new_window.show()
        мой_список_окон.append(new_window)


    3) назначить new_window дочерю main_window (идиологически правильный вариант):
    def new_form(parent):   
        new_window = uic.loadUi("interface2.ui")
        new_window.setWindowTitle("New form")
        new_window.show()
        new_window.setParent(parent)
    
    import test2
    main_window.pushButton.clicked.connect(lambda: test2.new_form(main_window))


    4) new_window должна быть переменной того обьекта который гарантировано не будет удалён (незнаю насчёт идиалогии... все варианты правильные. ):
    def new_form(parent):   
        parent.new_window = uic.loadUi("interface2.ui")
        parent.new_window.setWindowTitle("New form")
        parent.new_window.show()
    
    
    import test2
    main_window.pushButton.clicked.connect(lambda: test2.new_form(main_window))
    Ответ написан
    3 комментария