文章目录(Table of Contents)
简介
在实际应用编写中,可能会出现多个界面之间相互的跳转。例如有一个主界面,点击按钮之后会有另外一个窗口显示。在本文中,我们就会介绍这样的例子。包含一个主要 QDialog,点击按钮会出现一个新的 QDialog。
参考资料
因为本文的内容会比较简短。如果对 PyQt 不是很熟悉,建议先查看以下的文章:
- 使用 PyQt 快速搭建带有 GUI 的应用(1)–初识 PyQt,PyQt 的快速入门介绍;
- 使用 PyQt 快速搭建带有 GUI 的应用(2)–制作计算器,基于第一节课的内容,制作一个完整的应用,计算器;
- 使用 PyQt 快速搭建带有 GUI 的应用(3)–Qt Designer,介绍界面设计的工具,Qt Designer 的使用,并制作一个简单的记事本应用;
PyQt 多窗口跳转例子
主要会包含两个步骤,首先是创建一个「弹出界面」,接着创建一个「主页面」。主界面上会有一个按钮,点击按钮,会出现「弹出界面」。
创建一个弹出界面
首先我们创建一个弹出的界面。因为只是为了说明窗口之间的切换,所以我们这个界面就制作的比较简单。上面会包含一个按钮,点击会出现一个 QMessageBox
。
- import sys
- from PyQt5.QtWidgets import QFormLayout, QApplication, QDialog, QPushButton, QMessageBox
- class new_Dialog(QDialog):
- """弹出的界面
- """
- def __init__(self, parent=None):
- super().__init__(parent)
- form = QFormLayout()
- self.qpush_messageBox = QPushButton('出现弹窗')
- form.addRow('二号窗口', self.qpush_messageBox)
- self.setLayout(form)
- # 绑定按钮
- self.qpush_messageBox.clicked.connect(self.message_box)
- def message_box(self):
- QMessageBox.about(self, 'Title', 'Hello, World.')
上面运行之后,会有如下的界面。点击按钮出现弹窗:
创建一个主界面
接下来我们创建「主界面」。说是主界面,其实也非常简单。我们主要要实现的是通过点击按钮,显示上面的「弹出界面」。主界面代码如下所示:
- class Dialog(QDialog):
- """主要界面
- """
- def __init__(self, parent=None):
- super().__init__(parent)
- form = QFormLayout()
- self.qpush_openwin = QPushButton('打开一个新的窗口')
- form.addRow('点击按钮', self.qpush_openwin)
- self.setLayout(form)
- # 绑定按钮
- self.qpush_openwin.clicked.connect(self.select_file)
- def select_file(self):
- """选择文件
- """
- new_win = new_Dialog()
- new_win.show() # 一定要加 show, 否则原始窗口无法点击
- new_win.exec()
生成的界面如下所示:
完整代码-窗口跳转
上面我们创建了两个窗口,现在看一下最终的效果。完整代码如下所示:
- import sys
- from PyQt5.QtWidgets import QFormLayout, QApplication, QDialog, QPushButton, QMessageBox
- class new_Dialog(QDialog):
- """弹出的界面
- """
- def __init__(self, parent=None):
- super().__init__(parent)
- form = QFormLayout()
- self.qpush_messageBox = QPushButton('出现弹窗')
- form.addRow('二号窗口', self.qpush_messageBox)
- self.setLayout(form)
- # 绑定按钮
- self.qpush_messageBox.clicked.connect(self.message_box)
- def message_box(self):
- QMessageBox.about(self, 'Title', 'Hello, World.')
- class Dialog(QDialog):
- """主要界面
- """
- def __init__(self, parent=None):
- super().__init__(parent)
- form = QFormLayout()
- self.qpush_openwin = QPushButton('打开一个新的窗口')
- form.addRow('点击按钮', self.qpush_openwin)
- self.setLayout(form)
- # 绑定按钮
- self.qpush_openwin.clicked.connect(self.select_file)
- def select_file(self):
- """选择文件
- """
- new_win = new_Dialog()
- new_win.show() # 一定要加 show, 否则原始窗口无法点击
- new_win.exec()
- if __name__ == '__main__':
- app = QApplication(sys.argv)
- dlg = Dialog()
- dlg.show()
- sys.exit(app.exec_())
最终生成的效果如下所示:
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论