上一篇研究了主窗口通过按键弹出子窗口,这篇研究一下按键弹出子窗口后,主窗口自动退出。
以下是主窗口通过按键弹出子窗口,但是主窗口不退出的代码:
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_()