赞
踩
上一篇研究了主窗口通过按键弹出子窗口,这篇研究一下按键弹出子窗口后,主窗口自动退出。
以下是主窗口通过按键弹出子窗口,但是主窗口不退出的代码:
from PyQt5.QtWidgets import * import sys # 主窗口 class Main(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("主窗口") fbutton = QPushButton("弹出子窗口", self) fbutton.clicked.connect(self.show_child) def show_child(self): print("子窗口") child_window = child() child_window.exec_() class child(QDialog): def __init__(self): super().__init__() print("子窗口") self.resize(360, 240) self.setWindowTitle("我是子窗口啊") if __name__ == "__main__": app = QApplication(sys.argv) window = Main() window.show() sys.exit(app.exec_())
查了很多文章有一个是比较合适的,分享出来:
我们可以用QCoreApplication.instance().quit() 这个来实现对主窗口线程的退出,当然退出以后还得利用del来删除窗口,删除了窗口再调用另一个窗口的类
app = QApplication(sys.argv)
window = Main()
window.show()
app.exec()
del window
child_window = child()
child_window.exec_()
当然这里是可以在按键按下的时候触发退出
fbutton = QPushButton("弹出子窗口", self)
fbutton.clicked.connect(QCoreApplication.instance().quit)
或者
fbutton.clicked.connect(self.show_child)
def show_child(self):
print("子窗口")
QCoreApplication.instance().quit()
源码:
from PyQt5.QtWidgets import * from PyQt5.QtCore import * import sys # 主窗口 class Main(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("父窗口") fbutton = QPushButton("弹出子窗口", self) fbutton.clicked.connect(QCoreApplication.instance().quit) class child(QDialog): def __init__(self): super().__init__() print("子窗口") self.resize(360, 240) self.setWindowTitle("我是子窗口啊") def closeEvent(self, event): reply = QMessageBox.question(self, '提示', "确定退出吗?", QMessageBox.Yes |QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: event.accept() else: event.ignore() if __name__ == "__main__": app = QApplication(sys.argv) window = Main() window.show() app.exec() del window child_window = child() child_window.exec_()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。