pyqt5主窗口按键弹出子窗口的实现

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

pyqt5主窗口按键弹出子窗口的实现

☆程序小黑★   2023-03-20 我要评论

目标:主窗口保持,通过按键弹出子窗口

步骤一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("子窗口")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Main()
    window.show()
    sys.exit(app.exec_())

运行结果:

在这里插入图片描述

步骤二pyqt5创建子窗口,并设置内容

from PyQt5.QtWidgets import *
import sys
 
 
class Child(QMainWindow):
    def __init__(self):
        super().__init__()
        self.resize(360, 240)
        self.setWindowTitle("我是子窗口啊")

# 运行主窗口
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Child()
    window.show()
    sys.exit(app.exec_())

运行结果:

在这里插入图片描述

步骤三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("子窗口")
        self.resize(360, 240)
        self.setWindowTitle("我是子窗口啊")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Main()
    window.show()
    sys.exit(app.exec_())

本以为可以实现,结果和预想区别很大,按下按键后,结果如下:

在这里插入图片描述

结果是之间取代了原来的主窗口而且按键没有消失
原因是只有一个类,只有一个主窗口,所以修改内容都是在同一个窗口内修改的
经过修改,第二次修改后测试源码:

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.show()
        
class child(QMainWindow):
    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_())

但是,这里遇到个问题,子窗口闪退。

在这里插入图片描述

看到是可以打印子窗口,说明是已经进入子窗口,但是就是一直闪退
研究了很久,将show()改成exec_()后运行,报错如下,原因是不存在exec_()

在这里插入图片描述

解决办法:将class的QMainWindow改成QDialog

在这里插入图片描述


改成

在这里插入图片描述

运行结果:

在这里插入图片描述

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们