如何在按下按钮时销毁小部件并打开主窗口?

问题描述 投票:0回答:1
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)

    def click(self):
        m = MainWindow()
        m.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 类中的按钮时,小部件将被销毁,这可以正常工作,但我也期望 MainWindow 类出现。 这将用于一个简单的登录系统,其中登录由执行一些后端操作的小部件管理,如果一切正确,它应该销毁自身,然后授予对 QMainWindow 主应用程序的访问权限。 有人可以帮我提前谢谢你吗?

pyqt pyqt5 pyside pyside6 pyqt6
1个回答
0
投票

可能有更好的方法来实现你想要的,但这个简单的修复将使示例代码按预期工作。

def click(self):
    global m
    m = MainWindow()
    m.show()
    self.deleteLater()

如果你想从局部作用域分配给全局变量,你必须使用

global

另外,通常使用
deleteLater()
比使用
destroy()

更好
© www.soinside.com 2019 - 2024. All rights reserved.