无法从方法中打开新窗口

时间:2017-11-20 15:30:43

标签: python pyqt pyqt5 show qwidget

我正在开发一个简单的PyQt5应用程序,我正在尝试使用以下函数从父窗口打开一个新窗口:

def park(self, N):
    from time_dialog import T_MainWindow
    ui = T_MainWindow(self, N)
    ui.show()

我想要访问的课程是:

class T_MainWindow(QtWidgets.QWidget):
    def __init__(self, parent, N):
        super().__init__()
        self.PARENT = parent
        self.N = N
        self.setupUi()

如果使用以下单独运行,这两个窗口都会打开:

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    ui = T_MainWindow("", "")
    ui.show()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:1)

在第二个示例中打开T_MainWindow时,ui变量是全局,因此不会进行垃圾回收。但是当你从park方法打开它时,ui变量是 local ,所以当方法返回时(因此在窗口显示之前)它将被垃圾收集)。要解决此问题,您可以将局部变量更改为属性,以便为窗口保留引用:

def park(self, N):
    from time_dialog import T_MainWindow
    self.t_window = T_MainWindow(self, N)
    self.t_window.show()