python - 无法从方法打开新窗口

标签 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_())

最佳答案

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

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

关于python - 无法从方法打开新窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47395529/

相关文章:

python - QTreeView 小部件默认大小占用最大屏幕空间

python - TypedDict 的默认值

python - 通过带有数组列表的 numpy 数组进行广播

Python PyQt 装饰方法触发时出错

python - 使用 pyqt 进行多线程处理 - 无法同时运行单独的线程?

python - 在 Qt Designer 中使用 PySide 自定义小部件

python - 如何在 PyQt5 中制作嵌套堆叠布局?

python - 解包类似元组的文本文件

Python Tkinter Radiobutton 缩小用户输入

python - 标签文本未更新,但仅最后一行更新了 pyqt5 中的标签