基于PyQt5的UI界面开发——多界面切换

介绍

最初,因为课设的缘故,我只是想做一个通过按键进行切面切换而已,但是我看网上资料里面仅是语焉不详,让我困惑的很,但后面我通过摸索才发现这件事实在是太简单了,因此我想要记录下来。

本博客将介绍如何使用PyQt5库创建一个具有多界面切换功能的应用程序。通过详细的代码示例,我们将展示如何设计一个包含两个主要界面的应用,用户可以通过菜单栏的选项在这两个界面之间自由切换。代码示例中,我们使用了QStackedWidget来实现界面的切换。此外,我们还将分享如何连接菜单项与界面切换功能的技巧。无论是初学者还是有一定经验的开发者,都能通过本博客快速掌握PyQt5中多界面切换的实现方法,为自己的应用程序增添更多交互性和灵活性。

UI的设计

创建不需要选择其他,就只用选择主窗口,即下面图所示

在左边的控件中的Containers中选择Stacked Widget。拉到主窗口中,拉托到合适的大小。

由于目前的不是很明显,所以你可以暂时先修改一下它的属性。将frameShape修改为Box。

 现在就明显许多了,接下来我们随便的添加一些控件。

预览效果如下所示:

界面1

 界面2

可以通过右上角的两个三角形进行切换,没关系,只是这里的预览有,通过代码就没有了。接下来我准备使用菜单栏来进行示例,如下所示:

这里我们将菜单栏部分的“界面1”命名为action_1,“界面2”命名为action_2。

菜单栏控制界面切换

下面为我设计的简单ui转换的代码,Switch.py。

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'Switch.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(798, 553)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget)self.stackedWidget.setGeometry(QtCore.QRect(50, 70, 721, 401))self.stackedWidget.setFrameShape(QtWidgets.QFrame.Box)self.stackedWidget.setObjectName("stackedWidget")self.page = QtWidgets.QWidget()self.page.setObjectName("page")self.checkBox1 = QtWidgets.QCheckBox(self.page)self.checkBox1.setGeometry(QtCore.QRect(430, 150, 75, 16))font = QtGui.QFont()font.setFamily("Times New Roman")font.setPointSize(10)font.setBold(True)font.setWeight(75)self.checkBox1.setFont(font)self.checkBox1.setObjectName("checkBox1")self.pushButton1 = QtWidgets.QPushButton(self.page)self.pushButton1.setGeometry(QtCore.QRect(260, 150, 93, 28))self.pushButton1.setObjectName("pushButton1")self.stackedWidget.addWidget(self.page)self.page_2 = QtWidgets.QWidget()self.page_2.setObjectName("page_2")self.pushButton2 = QtWidgets.QPushButton(self.page_2)self.pushButton2.setGeometry(QtCore.QRect(300, 140, 93, 28))self.pushButton2.setObjectName("pushButton2")self.checkBox2 = QtWidgets.QCheckBox(self.page_2)self.checkBox2.setGeometry(QtCore.QRect(320, 230, 75, 16))font = QtGui.QFont()font.setFamily("Times New Roman")font.setPointSize(10)font.setBold(True)font.setWeight(75)self.checkBox2.setFont(font)self.checkBox2.setObjectName("checkBox2")self.stackedWidget.addWidget(self.page_2)self.label = QtWidgets.QLabel(self.centralwidget)self.label.setGeometry(QtCore.QRect(330, 10, 141, 41))font = QtGui.QFont()font.setFamily("宋体")font.setPointSize(12)self.label.setFont(font)self.label.setObjectName("label")MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 798, 26))self.menubar.setObjectName("menubar")self.menu = QtWidgets.QMenu(self.menubar)self.menu.setObjectName("menu")MainWindow.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.action_1 = QtWidgets.QAction(MainWindow)self.action_1.setObjectName("action_1")self.action_2 = QtWidgets.QAction(MainWindow)self.action_2.setObjectName("action_2")self.menu.addAction(self.action_1)self.menu.addAction(self.action_2)self.menubar.addAction(self.menu.menuAction())self.retranslateUi(MainWindow)self.stackedWidget.setCurrentIndex(0)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.checkBox1.setText(_translate("MainWindow", "test1"))self.pushButton1.setText(_translate("MainWindow", "界面1"))self.pushButton2.setText(_translate("MainWindow", "界面2"))self.checkBox2.setText(_translate("MainWindow", "test2"))self.label.setText(_translate("MainWindow", "多界面切换测试"))self.menu.setTitle(_translate("MainWindow", "选择"))self.action_1.setText(_translate("MainWindow", "界面1"))self.action_2.setText(_translate("MainWindow", "界面2"))

下面是实现通过菜单栏进行切换的核心代码,此处仅作一个示例。 

from PyQt5 import QtWidgetsfrom Switch import Ui_MainWindowclass SwichWindow(QtWidgets.QMainWindow, Ui_MainWindow):def __init__(self):super().__init__()self.setupUi(self)self.action_1.triggered.connect(self.showinterface_1)self.action_2.triggered.connect(self.showinterface_2)def showinterface_1(self):self.stackedWidget.setCurrentIndex(0)def showinterface_2(self):self.stackedWidget.setCurrentIndex(1)if __name__ == "__main__":import sysapp = QtWidgets.QApplication(sys.argv)window = SwichWindow()window.show()sys.exit(app.exec_())

其实,这里应该是可以直接通过槽信号连接的,但我实在是有段时间没有接触了,况且使用代码也比较容易。 

演示效果

如果觉得这个框有点碍眼,可以将其调回无框的状态。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/64135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作002:HelloWorld

文章目录 操作002:HelloWorld一、目标二、具体操作1、创建Java工程①消息发送端(生产者)②消息接收端(消费者)③添加依赖 2、发送消息①Java代码②查看效果 3、接收消息①Java代码②控制台打印③查看后台管理界面 操作…

机器视觉检测相机基础知识 | 颜色 | 光源 | 镜头 | 分辨率 / 精度 / 公差

注:本文为 “keyence 视觉沙龙中机器视觉检测基础知识” 文章合辑。 机器视觉检测基础知识(一)颜色篇 视觉检测硬件构成的基本部分包括:处理器、相机、镜头、光源。 其中,和光源相关的最重要的两个参数就是光源颜色和…

【体验官招募】SoFlu - JavaAI 开发助手:开启智能开发新时代

你是否有过这样的经历?在深夜的办公室里,面对紧急的 Java 项目,看着厚厚的需求文档,你是否感到无从下手? 当你尝试理解客户那些复杂又模糊的需求时,是否会因为要和产品经理反复沟通确认每一个细节而感到厌…

自学记录HarmonyOS Next DRM API 13:构建安全的数字内容保护系统

在完成了HarmonyOS Camera API的开发之后,我开始关注更复杂的系统级功能。在浏览HarmonyOS Next文档时,我发现了一个非常有趣的领域:数字版权管理(DRM)。最新的DRM API 13提供了强大的工具,用于保护数字内容…

【HENU】河南大学计院2024 操作系统 简答题复习

和光同尘_我的个人主页 一直游到海水变蓝。 单项选择 15x2 30 判断 10x1 10 简答 3x10 30 综合 3x10 30 简答题 简述操作系统的四个基本特征。 并发性 共享性 虚拟性 异步性 并发性是最重要特性,其它三种特性以此为前提。 并发 并发(Concurrence)&#…

GEE错误——PCA系数变换的时候出现的错误

目录 错误提示1 错误提示2 原始的教程链接: 错误代码 修正后的代码 结果 错误提示1 这个是因为原始GEE教程中给的让我们填入需要进行计算的波段名称,而且是以list的形式传入。 错误提示2 这里我们虽然传入了正确的波段名称,但是发现要…

C#代码实现把中文录音文件(.mp3 .wav)转为文本文字内容

我们有一个中文录音文件.mp3格式或者是.wav格式,如果我们想要提取录音文件中的文字内容,我们可以采用以下方法,不需要使用Azure Speech API 密钥注册通过离线的方式实现。 1.首先我们先在NuGet中下载两个包 NAudio 2.2.1、Whisper.net 1.7.3…

计算机操作系统与安全复习笔记

1 绪论 操作系统目标: 方便性; 有效性; 可扩充性; 开放性. 作用: 用户与计算机硬件系统之间的接口; 计算机资源的管理者; 实现了对计算机资源的抽象; 计算机工作流程的组织者. 多道程序设计: 内存中同时存放若干个作业, 使其共享系统资源且同时运行; 单处理机环境下宏观上并行…

qt5.12.11+msvc编译器编译qoci驱动

1.之前编译过minGW编译器编译qoci驱动,很顺利就完成了,文章地址:minGW编译qoci驱动详解,今天按照之前的步骤使用msvc编译器进行编译,直接就报错了: 查了些资料,发现两个编译器在编译时,pro文件中引用的库不一样,下面是msvc编译器引用的库,其中编译引用的库我这里安装…

Java爬虫实战:深度解析VIP商品详情获取技术

在数字化时代,数据的价值不言而喻。对于电商平台而言,掌握VIP商品的详细信息是提升服务质量、优化用户体验的关键。然而,这些信息往往被复杂的网页结构和反爬虫策略所保护。本文将带你深入了解如何使用Java编写爬虫,以安全、高效地…

校史馆云展厅适合远程教学吗?

随着信息技术的飞速发展,远程教学已经成为教育领域的一个重要趋势。 校史馆作为学校文化传承的重要场所,承载着丰富的历史信息和教育资源。 那么,将校史馆搬到云端,构建云展厅,是否适合远程教学呢? 下面…

一些elasticsearch重要概念与配置参数

ES 是在 lucene 的基础上进行研发的,隐藏了 lucene 的复杂性,提供简单易用的 RESTful Api接口。ES 的分片相当于 lucene 的索引。 Node 节点的几种部署实例 实例一: 只用于数据存储和数据查询,降低其资源消耗率 node.master: false node.da…

Go Energy 跨平台框架 v2.5.1 发布

Energy 框架 是Go语言基于CEF 和 LCL 开发的跨平台 GUI 框架, 具体丰富的系统原生 UI 控件集, 丰富的 CEF 功能 API,简化且不失功能的 CEF 功能 API 使用。 特性? 特性描述跨平台支持 Windows, macOS, Linux简单Go语言的简单特性,使用简单…

宏转录组+HiFi宏基因组:揭示厌氧消化中的碳流和能量转换

厌氧消化是一种重要的工程生物技术,对有机废物的资源回收和可再生能源的生产起着关键作用。然而,由于对未培养的厌氧菌及其适应环境变化的能力了解有限,这限制了该技术的优化和生物气生产的可持续性。今天小编带大家看一篇发表在《Microbiome…

SpringCloud 运用(2)—— 跨服务调度

上一篇:SpringCloud 入门(1)—— nacos 注册中心-CSDN博客 1.RestTemplate 跨服务请求 RestTemplate 是 Spring 框架中的一个同步客户端,用于与 HTTP 服务进行交互。它简化了与 HTTP 服务器通信的过程,并且提供了对多…

解决Springboot整合Shiro自定义SessionDAO+Redis管理会话,登录后不跳转首页

解决Springboot整合Shiro自定义SessionDAORedis管理会话,登录后不跳转首页 问题发现问题解决 问题发现 在Shiro框架中,SessionDAO的默认实现是MemorySessionDAO。它内部维护了一个ConcurrentMap来保存session数据,即将session数据缓存在内存…

windows nmake 安装openssl

windows nmake 编译和安装 openssl 本文提供了在Windows环境下安装OpenSSL的详细步骤,包括下载Perl、NASM和VisualStudio,配置环境变量,使用PerlConfigure设置平台,通过nmake进行编译、测试和安装。整个过程涉及32位和64位版本的选…

一、Hadoop概述

文章目录 一、Hadoop是什么二、Hadoop发展历史三、Hadoop三大发行版本1. Apache Hadoop2. Cloudera Hadoop3. Hortonworks Hadoop四、Hadoop优势1. 高可靠性2. 高扩展性3. 高效性4. 高容错性五、Hadoop 组成1. Hadoop1.x、2.x、3.x区别2. HDFS 架构概述3. YARN 架构概述4. MapR…

python版本的Selenium的下载及chrome环境搭建和简单使用

针对Python版本的Selenium下载及Chrome环境搭建和使用,以下将详细阐述具体步骤: 一、Python版本的Selenium下载 安装Python环境: 确保系统上已经安装了Python 3.8及以上版本。可以从[Python官方网站]下载并安装最新版本的Python,…

vue---- H5页面 pdf,docx,excel文件预览下载功能

vue---- H5页面 pdf,docx,excel文件预览&&下载功能 pdf,docx,excel文件预览&&下载适用于vue2和vue3,示例为vue3 1.npm下载这些文件的插件(选择自己需要预览的进行下载) 安装pd…