无法通过方法打开新的 window

Unable to open a new window from a method

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

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

我尝试访问的 class 是:

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

如果 运行 单独使用,这两个 windows 都会打开:

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

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

保留一个引用
def park(self, N):
    from time_dialog import T_MainWindow
    self.t_window = T_MainWindow(self, N)
    self.t_window.show()