You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySide6点击按钮销毁Widget并打开MainWindow的问题

问题解决:PySide6点击按钮后无法正常显示MainWindow

你的代码里,click方法内创建的MainWindow是局部变量,方法执行结束后该实例会被Python垃圾回收机制销毁,导致窗口刚显示就消失。解决办法是把MainWindow实例保存到不会被立即销毁的作用域中,比如绑定为wid类的实例属性。

修改后的代码:

from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QMainWindow
import sys

class wid(QWidget):
    def __init__(self):
        super().__init__()
        self.done = False
        self.layoutt = QVBoxLayout()
        self.button = QPushButton("Click me")
        self.layoutt.addWidget(self.button)
        self.setLayout(self.layoutt)
        self.button.clicked.connect(self.click)
        self.main_win = None  # 用于保存主窗口实例

    def click(self):
        self.main_win = MainWindow()
        self.main_win.show()
        self.destroy()


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.button = QPushButton("test")
        self.setCentralWidget(self.button)


app = QApplication(sys.argv)
m = wid()
m.show()
app.exec()

说明:

  • 在wid类中新增self.main_win属性,用来持有MainWindow实例,避免方法执行完毕后实例被回收。
  • 调整后点击按钮,原Widget会被销毁,同时MainWindow能持续正常显示,满足登录验证后切换主程序窗口的需求。

内容的提问来源于stack exchange,提问作者relu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 11:05:53