страница, которую я создал, открывается и закрывается немедленно - PullRequest
0 голосов
/ 17 мая 2019

Я хочу открыть второе окно при нажатии кнопки. Окно открывается и закрывается сразу. Кто-то знает, что я делаю не так?

Это мой код:


import sys
from PyQt5 import QtGui
from PyQt5.QtWidgets import QMainWindow, QPushButton, QLabel, QApplication

class FirstWindow(QMainWindow):
    def __init__(self):
        super(FirstWindow, self).__init__()
        self.setGeometry(50, 50, 500, 300)
        self.setWindowTitle('It\'s working!')
        self.initUI()
    def initUI(self):
        second_screen_btn = QPushButton('Open second screen', self)
        second_screen_btn.setGeometry(250, 100, 100, 100)
        second_screen_btn.clicked.connect(self.open_second_screen)
        self.show()

    def open_second_screen(self):
        second_window = SecondWindow()

class SecondWindow(QMainWindow):

    def __init__(self):
        super(SecondWindow, self).__init__()
        self.setGeometry(100, 100, 500, 300)
        self.setWindowTitle('This is a second window')
        self.initUI()

    def initUI(self):
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    gui = FirstWindow()
    sys.exit(app.exec_())

1 Ответ

2 голосов
/ 17 мая 2019

Просто измените ваш open_second_screen на этот:

def open_second_screen(self):
    self.second_window = SecondWindow()
    self.second_window.show()

(И, конечно, удалить self.show () из другого класса)

Это повторяющаяся проблема с PyQt. Новые окна собираются мусором, если они не хранятся в переменной, а переменная second_window удаляется по завершении функции, если вы не сохраните ее в качестве параметра экземпляра вашего окна.

...