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
相关产品推荐
相关产品推荐

