pyqt5主窗口按键弹出子窗口的实现
☆程序小黑★ 人气:0目标:主窗口保持,通过按键弹出子窗口
步骤一: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
改成
运行结果:
加载全部内容