PyQt5 实现多个页面跳转,我们可以借助一个 Controller 控制器来实现,大体思路如下:


# 利用一个控制器来控制页面的跳转class Controller:def __init__(self):passdef show_A(self):# 创建 A 窗口对象并显示# 关闭其余窗口对象def show_B(self):# 创建 B 窗口对象并显示# 关闭其余窗口对象def show_C(self):# 创建 C 窗口对象并显示# 关闭其余窗口对象 

来看一个使用情景:

  • 用 Qt designer 设计好了三个页面:hello.pylogin.pyoperate.py

  • hello.py 中有一个 Id 为 loginBuuton 的按钮,用于跳转到 login.py 窗口

  • hello.py 中还有一个 Id 为 operateButton 的按钮,用于跳转到 operate.py 窗口

实现效果

注:由于我们的 界面逻辑 是分离的,所以界面只需满足上面的使用情境中的要求即可。

运行程序启动一个 hello.py 的欢迎界面:

点击 票务管理,实际上是点击了 loginButton 按钮,跳转到了 login.py 登录界面:

如果欢迎界面中点击的是 票务查询,实际上是点击了 operateButton,会跳转到 operate.py 界面:

代码编写

首先导入需要的模块:系统模块利用designer设计的页面


import sysfrom PyQt5 import QtCore, QtWidgets, QtCore# 导入 Qt designer 设计的页面from hello import Ui_MainWindow as Hello_Ui from login import Ui_MainWindow as Login_Uifrom operate import Ui_MainWindow as Operate_Ui 

然后写页面对应的窗口类,我们这里简单的实现 一个页面往其他页面的跳转

实现跳转的逻辑主要都在 HelloWindow 类中,其他窗口类仅仅做了初始化:


# 主窗口class HelloWindow(QtWidgets.QMainWindow, Hello_Ui):switch_window1 = QtCore.pyqtSignal() # 跳转信号switch_window2 = QtCore.pyqtSignal() # 跳转信号def __init__(self):super(HelloWindow, self).__init__()self.setupUi(self)self.queryButton.clicked.connect(self.goOperate)self.manageButton.clicked.connect(self.goLogin)def goLogin(self):self.switch_window1.emit()def goOperate(self):self.switch_window2.emit()# 登录窗口class LoginWindow(QtWidgets.QMainWindow, Login_Ui):def __init__(self):super(LoginWindow, self).__init__()self.setupUi(self)# 操作窗口class OperateWindow(QtWidgets.QMainWindow, Operate_Ui):def __init__(self):super(OperateWindow, self).__init__()self.setupUi(self) 

控制器用来控制页面的跳转:


# 利用一个控制器来控制页面的跳转class Controller:def __init__(self):pass# 跳转到 hello 窗口def show_hello(self):self.hello = HelloWindow()self.hello.switch_window1.connect(self.show_login)self.hello.switch_window2.connect(self.show_operate)self.hello.show()# 跳转到 login 窗口, 注意关闭原页面def show_login(self):self.login = LoginWindow()self.hello.close()self.login.show()# 跳转到 operate 窗口, 注意关闭原页面def show_operate(self):self.operate = OperateWindow()self.hello.close()self.operate.show() 

启动整个项目:


def main():app = QtWidgets.QApplication(sys.argv)controller = Controller() # 控制器实例controller.show_hello() # 默认展示的是 hello 页面sys.exit(app.exec_())if __name__ == '__main__':main() 

补充:使用 designer 开发,页面跳转函数

===========================================================================================

假设写好了一个 A 页面:


class MainWindow(QMainWindow, Ui_MainWindow):  # 多重继承QMainWindow和Ui_MainWindowdef __init__(self):super(MainWindow, self).__init__()  # 先调用父类QMainWindow的初始化方法self.setupUi(self)  # 再调用setupUi方法 

在 B 页面引入了 A 页面:


from main import MainWindow 

在 A 页面需要进行页面跳转只需要封装一个以下函数即可:


# 关闭当前界面, 打开主界面def toMainWindow(self):self.ui1 = MainWindow()self.ui1.show()self.close() 

不使用 designer 的页面跳转

=====================================================================================

这个更简单了,只需要在 main 方法里将 A 页面的点击事件与 B 页面的展示绑定即可:


import sysfrom PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication# 《MySql面试专题》![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/323d061e349a5dda0977caa8107cf4b5.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/efe888023326af51541dc45b08058c5e.png)# 《MySql性能优化的21个最佳实践》![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/abacd1a6ffaf7f9871117f9d65b53f25.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/b69652b6f8f437369d407cda91b8557e.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/d32344e66a6bd20b21058be6c1e2c7ee.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/ce1d500b713a237936531e218ce1c2af.png)# 《MySQL高级知识笔记》![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/b069a90ee1f07e73bf7a91620327b592.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/9ec9681469064837738581c2152089e9.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/b79ed1933e439c25eff4f9e6152f57db.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/510410b369f47c8345cf4fc1fc78c9bd.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/0f493c0e5330af145b1bb39c1c054a7f.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/38638dc947e657cb35da795e75f80ecb.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/32287c9257ead838641f594ef01c6dd2.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/65d2e99de5dd3ef2fb3eb7156e19cdcc.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/dd0ab11778edb4c7d3dc28aa823aae58.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/dc4310f3d8065b580176c867580d8396.png)文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/6f9806273794229d9aeef497a9efc7ea.png)## 获取方式:[点击这里前往传送门](https://gitee.com/vip204888/java-p7)g-q3z1IyVi-1628598472549)][外链图片转存中...(img-DFM65ycS-1628598472550)][外链图片转存中...(img-9Tm5UA8L-1628598472551)][外链图片转存中...(img-LCZrlCJP-1628598472552)]文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图[外链图片转存中...(img-e4EEy30K-1628598472552)]## 获取方式:[点击这里前往传送门](https://gitee.com/vip204888/java-p7)**关注我,点赞本文给更多有需要的人**

【PyQt5,2021最新Java常用开源库总结相关推荐

  1. Android面试题大全,2021最新Android常用开源库总结

    Broadcast Receiver面试题 1.Broadcast Receiver是什么 Broadcast是四大组件之一,是一种广泛运用在应用程序之间传输信息的机制,通过发送Intent来传送我们 ...

  2. 2021最新Android常用开源库总结,最强技术实现

    概述 想了很久怎么样可以让文章的标题不那么悲观,但是各种文案都在我脑海里面不断的被否定,要么是不那么抓眼球,要么是立意不匹配.最后想了想,这个标题是真的符合我最近的感悟. 希望看过文章,能有同感的朋友 ...

  3. 2021最新Android常用开源库总结,建议收藏

    概述 想了很久怎么样可以让文章的标题不那么悲观,但是各种文案都在我脑海里面不断的被否定,要么是不那么抓眼球,要么是立意不匹配.最后想了想,这个标题是真的符合我最近的感悟. 希望看过文章,能有同感的朋友 ...

  4. android button 添加事件_2019最新Android常用开源库总结

    前言 收集了一些比较常见的开源库,特此记录(已收录350+).另外,本文将持续更新,大家有关于Android 优秀的开源库,也可以在下面留言. 一 .基本控件 TextView HTextView 一 ...

  5. 2019最新Android常用开源库总结(From:知乎)

    文章目录 一 .基本控件 **TextView** **EditText** **ImageView** **Button** **Spinner** **CheckBox** **ProgressB ...

  6. 2019最新Android常用开源库总结

    前言 收集了一些比较常见的开源库,特此记录(已收录350+).另外,本文将持续更新,大家有关于Android 优秀的开源库,也可以在下面留言. 一 .基本控件 TextView HTextView 一 ...

  7. 2019最新Android常用开源库总结(附带github链接)

    前言 收集了一些比较常见的开源库,特此记录(已收录350+).另外,本文将持续更新,大家有关于Android 优秀的开源库,也可以在下面留言. 一 .基本控件 1.TextView HTextView ...

  8. 2019最新Android常用开源库总结(持续更新,建议收藏)

    热文导读|   点击标题阅读 如何才能成为优秀的架构师? 23种设计模式及案例整理分享(建议收藏) 程序员的35个坏习惯,你有几条? 作者:欢子-3824 来源:https://blog.csdn.n ...

  9. android标题栏添加按钮_2019最新Android常用开源库总结(持续更新,建议收藏)

    热文导读|   点击标题阅读 如何才能成为优秀的架构师? 23种设计模式及案例整理分享(建议收藏) 程序员的35个坏习惯,你有几条? 作者:欢子-3824 来源:https://blog.csdn.n ...

最新文章

  1. c语言输出n以内完数,c语言:输入n,输出不超过n的全部完全数。能帮忙找出怎么错么?...
  2. Snap和Flatpak 通吃所有发行版的打包方式。
  3. thinkphp的伪静态化
  4. java发送get请求_如何快速掌握Java技术 Tomcat知识点有哪些
  5. 如何使用Java,Maven,Jetty创建Web应用程序项目
  6. Kali Linux 自定义分辨率
  7. VMWare虚拟机下为Windows Server 2012配置静态IP(NAT方式)
  8. Nginx配置同一个域名同时支持http与https两种方式访问
  9. Windows 环境变量的两点说明
  10. puppet成长日记四 Exec资源详细介绍及案例分析
  11. 【记录】【解决方案】java发邮件错误:Couldn‘t connect to host, port: localhost, 25; timeout -1;易邮SMTP服务器无法启动;
  12. QOpenGLWidget显示图片
  13. hive查询数据库总条数
  14. VB中关于Name属性和Caption属性
  15. Vista和Win2008中如何卸载IE8
  16. 基础篇——树莓派远程连接工具VNC不显示视频或摄像头画面解决方式
  17. 云计算基础-云计算基础介绍整理
  18. 谢菲尔德大学计算机科学学院地理位置,2020年谢菲尔德大学在哪里及校区详细地址介绍...
  19. 强人工智能和弱人工智能的区别,你知道吗?
  20. 5G关键技术之波束成型

热门文章

  1. WEB前端之网页设计③----最新最全详解/如何在网页上创建表格
  2. __stack_chk_fail栈检查失败
  3. 天翼云主攻“5G+云+AI”,新生态革命的冲锋
  4. 东东在用计算机计算一道题时 把被除数的前,北师大二年级数学下册期末试卷...
  5. 如何用SaaS科技赋能中小企业管理
  6. Amazon ParallelCluster 3 集成 ANSYS CFD 计算
  7. Java代码获取网络和本地视频时长等信息
  8. 不用安装Excel使用PSExcel自动处理Excel文件
  9. 匹兹堡大学约翰斯敦计算机学院,英语翻译翻译Every human being,no matter what he is doing,gives off...
  10. idea怎么进行c语言编程_idea编写c语言