PyQt5使用程序关闭窗口(实测可用)

假如有这样一个题目:用PyQt创建了两个窗口,第一个窗口用来登录,当登录成功后,自动关闭第一个窗口,弹出第二个窗口。

问题:如何通过程序关闭第一个窗口呢?

先看我顶层文件的代码:

if __name__ == "__main__":
    app = QApplication(sys.argv)
    
    w1 = MyWindow() # 第一个窗口
    w1.ui.show()
    
    app.exec()
    # -----------------< 想在这里 关闭第一个窗口,打开第二个窗口

    w2 = MyWindow2() # 第二个窗口
    w2.ui.show()
    
    app.exec()

从网上查了一圈,我整出了一个可用的方法:

首先,第一个窗口的class中,它在想关闭自己的时候,执行QCoreApplication.instance().quit() 

# 需要引入的头文件
from PyQt5.QtCore import QCoreApplication

# 关闭窗口进程需要执行的代码
QCoreApplication.instance().quit()

       上面第一句话是需要引入的头文件,第二句话就是在关闭该窗口执行的代码,执行该代码会强制QApplication的循环结束,如果程序中只有一个窗口的话,循环结束后,窗口就自动关闭了。

       但是在咱们的题目中,第一个窗口结束后,总程序没有结束,所以这样子虽然会调用出第二个窗口,但是第一个窗口依然存活,依然可以点击(至于为什么,还得查看一下C++源码)。那么 在顶层文件中添加一句话就可: del  w1

if __name__ == "__main__":
    app = QApplication(sys.argv)
    
    w1 = MyWindow()
    w1.ui.show()
    
    app.exec()
    del w1 # 上一段进程QApplication循环结束后,执行del w1删除创建的窗口,将窗口关闭
    
    w2 = MyWindow2()
    w2.ui.show()
    
    app.exec()

完美解决!大家可以试一试

那么 QCoreApplication.instance().quit()  这句话放在哪里呢,可以绑定一个按钮,放在按钮的槽函数(回调函数)中,或者放在任何一个槽函数中,只要满足一定的条件,就可以将其关闭,比如在该题目中,检测到输入用户名和密码正确时,就执行这句话,让Application的循环结束,顶层文件的程序就会执行del w1,关闭第一个窗口,打开第二个窗口。

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值