使用 PyQt 快速搭建带有 GUI 的应用(8)–多窗口之间跳转

  • A+
所属分类:Python库介绍
摘要在实际应用编写中,可能会出现多个界面之间相互的跳转。例如有一个主界面,点击按钮之后会有另外一个窗口显示。在本文中,我们就会介绍这样的例子。包含一个主要 QDialog,点击按钮会出现一个新的 QDialog。

简介

在实际应用编写中,可能会出现多个界面之间相互的跳转。例如有一个主界面,点击按钮之后会有另外一个窗口显示。在本文中,我们就会介绍这样的例子。包含一个主要 QDialog,点击按钮会出现一个新的 QDialog。

参考资料

因为本文的内容会比较简短。如果对 PyQt 不是很熟悉,建议先查看以下的文章:

 

PyQt 多窗口跳转例子

主要会包含两个步骤,首先是创建一个「弹出界面」,接着创建一个「主页面」。主界面上会有一个按钮,点击按钮,会出现「弹出界面」。

创建一个弹出界面

首先我们创建一个弹出的界面。因为只是为了说明窗口之间的切换,所以我们这个界面就制作的比较简单。上面会包含一个按钮,点击会出现一个 QMessageBox

  1. import sys
  2. from PyQt5.QtWidgets import QFormLayout, QApplication, QDialog, QPushButton, QMessageBox
  3. class new_Dialog(QDialog):
  4.     """弹出的界面
  5.     """
  6.     def __init__(self, parent=None):
  7.         super().__init__(parent)
  8.         form = QFormLayout()
  9.         self.qpush_messageBox = QPushButton('出现弹窗')
  10.         form.addRow('二号窗口', self.qpush_messageBox)
  11.         self.setLayout(form)
  12.         # 绑定按钮
  13.         self.qpush_messageBox.clicked.connect(self.message_box)
  14.     def message_box(self):
  15.         QMessageBox.about(self, 'Title', 'Hello, World.')

上面运行之后,会有如下的界面。点击按钮出现弹窗:

使用 PyQt 快速搭建带有 GUI 的应用(8)--多窗口之间跳转

创建一个主界面

接下来我们创建「主界面」。说是主界面,其实也非常简单。我们主要要实现的是通过点击按钮,显示上面的「弹出界面」。主界面代码如下所示:

  1. class Dialog(QDialog):
  2.     """主要界面
  3.     """
  4.     def __init__(self, parent=None):
  5.         super().__init__(parent)
  6.         form = QFormLayout()
  7.         self.qpush_openwin = QPushButton('打开一个新的窗口')
  8.         form.addRow('点击按钮', self.qpush_openwin)
  9.         self.setLayout(form)
  10.         # 绑定按钮
  11.         self.qpush_openwin.clicked.connect(self.select_file)
  12.     def select_file(self):
  13.         """选择文件
  14.         """
  15.         new_win = new_Dialog()
  16.         new_win.show() # 一定要加 show, 否则原始窗口无法点击
  17.         new_win.exec()

生成的界面如下所示:

使用 PyQt 快速搭建带有 GUI 的应用(8)--多窗口之间跳转

 

完整代码-窗口跳转

上面我们创建了两个窗口,现在看一下最终的效果。完整代码如下所示:

  1. import sys
  2. from PyQt5.QtWidgets import QFormLayout, QApplication, QDialog, QPushButton, QMessageBox
  3. class new_Dialog(QDialog):
  4.     """弹出的界面
  5.     """
  6.     def __init__(self, parent=None):
  7.         super().__init__(parent)
  8.         form = QFormLayout()
  9.         self.qpush_messageBox = QPushButton('出现弹窗')
  10.         form.addRow('二号窗口', self.qpush_messageBox)
  11.         self.setLayout(form)
  12.         # 绑定按钮
  13.         self.qpush_messageBox.clicked.connect(self.message_box)
  14.     def message_box(self):
  15.         QMessageBox.about(self, 'Title', 'Hello, World.')
  16. class Dialog(QDialog):
  17.     """主要界面
  18.     """
  19.     def __init__(self, parent=None):
  20.         super().__init__(parent)
  21.         form = QFormLayout()
  22.         self.qpush_openwin = QPushButton('打开一个新的窗口')
  23.         form.addRow('点击按钮', self.qpush_openwin)
  24.         self.setLayout(form)
  25.         # 绑定按钮
  26.         self.qpush_openwin.clicked.connect(self.select_file)
  27.     def select_file(self):
  28.         """选择文件
  29.         """
  30.         new_win = new_Dialog()
  31.         new_win.show() # 一定要加 show, 否则原始窗口无法点击
  32.         new_win.exec()
  33. if __name__ == '__main__':
  34.     app = QApplication(sys.argv)
  35.     dlg = Dialog()
  36.     dlg.show()
  37.     sys.exit(app.exec_())

最终生成的效果如下所示:

使用 PyQt 快速搭建带有 GUI 的应用(8)--多窗口之间跳转
  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: