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

改成

运行结果:

到此这篇关于pyqt5主窗口按键弹出子窗口的实现的文章就介绍到这了,更多相关pyqt5主窗口按键弹出子窗口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
