我的新python gui窗口从另一个窗口打开后立即退出。如何解决这个问题

时间:2017-05-30 03:25:10

标签: python python-3.x pyqt4

我已经编写了python pyqt代码来打开一个新窗口,其中一个标签来自另一个窗口的按钮点击。问题是,新窗口一打开就会退出。我如何解决这个问题。

我写的代码是

import sys
from PyQt4 import QtGui,QtCore

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window,self).__init__()
        self.btn=QtGui.QPushButton('button',self)
        self.btn.clicked.connect(display)
        self.show()

class display(QtGui.QWidget):
    def __init__(self):
        super(display,self).__init__()
        self.lab=QtGui.QLabel()
        self.lab.setText("hi")
        self.show()

def main():
    App=QtGui.QApplication(sys.argv)
    Gui=Window()
    sys.exit(App.exec_())

main()

2 个答案:

答案 0 :(得分:0)

您需要为第二个窗口保留对QWidget对象的引用。目前,当您单击该按钮时,会触发clicked信号并调用disp1。这会创建窗口小部件,但随后会立即进行垃圾回收。

而是这样做以保持参考:

import sys
from PyQt4 import QtGui,QtCore

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window,self).__init__()
        self.btn=QtGui.QPushButton('button',self)

        self.btn.clicked.connect(self.open_new_window)
        self.show()

    def open_new_window(self):
        # creates the window and saves a reference to it in self.second_window
        self.second_window = disp1()

class displ(QtGui.QWidget):
    def __init__(self):
        super(displ,self).__init__()
        self.lab=QtGui.QLabel()
        self.lab.setText("hello")
        self.show()

def main():
    App=QtGui.QApplication(sys.argv)
    Gui=Window()
    sys.exit(App.exec_())

main()

答案 1 :(得分:-1)

将函数作为参数传递时,最好不要包括括号?尝试

 sys.exit(App.exec_)

而不是

 sys.exit(App.exec_())