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

【每日学点鸿蒙知识】压力测试、Web组件拦截器、nfc开关状态、定位能力、rn支持的三方库

1、HarmonyOS的wukong 支持运行python脚本进行压力或者常规测试吗? Python脚本调用hdc命令,执行hdc shell wukong XXXwukong只支持稳定性压测,普通测试建议使用arkxtest测试框架 2、Web组件页面内跳转时自定义WebHeader问题? 如…

GDPU Vue前端框架开发 期末赛道出勇士篇(更新ing)

记住,年底陪你跨年的不会仅是方便面跟你的闺蜜,还有孑的笔记。 选择题 1.下列选项用于设置Vue.js页面视图的元素是()。 A. Template B. script C. style D. title 2.下列选项中能够定义Vuejs根实例对象的元素是(&…

Flutter开发HarmonyOS 鸿蒙App的好处、能力以及把Flutter项目打包成鸿蒙应用

Flutter开发HarmonyOS的好处: Flutter是谷歌公司开发的一款开源、免费的UI框架,可以让我们快速的在Android和iOS上构建高质量App。它最大的特点就是跨平台、以及高性能。 目前 Flutter 已经支持 iOS、Android、Web、Windows、macOS、Linux 的跨平台开发…

Effective C++ 条款 17:以独立语句将 `newed` 对象置入智能指针

文章目录 条款 17:以独立语句将 newed 对象置入智能指针核心思想示例代码错误用法分析推荐设计总结 条款 17:以独立语句将 newed 对象置入智能指针 核心思想 问题背景 如果在将 newed 对象传递给智能指针时,包含了复杂的表达式,一…

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

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

【Compose multiplatform教程07】多平台常用组件和重要组件目录

一、基础交互与显示组件 Text 查看示例 功能说明:用于在界面上显示文本内容,支持设置字体、大小、颜色、样式(如加粗、斜体、下划线)等属性,满足不同的文本展示需求,可传达各种信息给用户。示例场景&#…

自学记录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)&#…

基于Android的校园导航系统

基于Android的校园导航系统是一种专为校园环境设计的移动应用程序,旨在帮助学生、教职工及访客快速、准确地找到校园内的目的地。以下是对基于Android的校园导航系统的详细介绍: 一、系统概述 基于Android的校园导航系统通常包括客户端(移动…

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…

【py脚本+logstash+es实现自动化检测工具】

概述 有时候,我们会遇到需要查看服务器的网络连接或者内存或者其他指标是否有超时,但是每次需要登录到服务器查看会很不方便,所以我们可以设置一个自动脚本化工具自动帮助我们查看,下面我做了一个demo在windows上面。 一、py脚本 import s…

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

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…

交换机与路由器的区别

交换机和路由器是网络中的两种关键设备,它们各自承担不同的功能,主要区别体现在以下几个方面: 一、工作层次与功能 交换机: 工作层次:交换机主要工作在OSI模型的第二层,即数据链路层。 功能:交…