当前位置:   article > 正文

pyqt5主窗口按键弹出子窗口,并且父窗口自动退出_pyqt5 弹出子窗口后主窗口不能点击操作

pyqt5 弹出子窗口后主窗口不能点击操作

上一篇研究了主窗口通过按键弹出子窗口,这篇研究一下按键弹出子窗口后,主窗口自动退出。
以下是主窗口通过按键弹出子窗口,但是主窗口不退出的代码:

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_())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

查了很多文章有一个是比较合适的,分享出来:
我们可以用QCoreApplication.instance().quit() 这个来实现对主窗口线程的退出,当然退出以后还得利用del来删除窗口,删除了窗口再调用另一个窗口的类

    app = QApplication(sys.argv)
    window = Main()
    window.show()
    app.exec()
    del window
    
    child_window = child()
    child_window.exec_()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

当然这里是可以在按键按下的时候触发退出

fbutton = QPushButton("弹出子窗口", self)
fbutton.clicked.connect(QCoreApplication.instance().quit)
  • 1
  • 2

或者

fbutton.clicked.connect(self.show_child)
def show_child(self):
     print("子窗口")
     QCoreApplication.instance().quit()
  • 1
  • 2
  • 3
  • 4

源码:

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_()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/119584
推荐阅读
相关标签
  

闽ICP备14008679号