pyQt主界面与子界面切换简易框架
本篇来介绍使用python中是Qt功能包,设置一个简易的多界面切换框架,实现主界面和多个子界面直接的切换显示。
1 主界面
设计的Demo主界面如下,主界面上有两个按钮图标,点击即可切换到对应的功能界面中,进入子界面后,通过返回按钮,又可回到主界面。
这里以两个按钮图标示例,实际使用中,可继续扩展。

1.1 布局
如下是本Demo的主界面的布局代码,实际使用时,可根据自己的需要进行修改。
homeUI.py
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
from uiDef import *
from musicPlayer import MusicPlayer
from videoPlayer import VideoPlayerclass mainWindow(QMainWindow):def __init__(self):super().__init__()self.main_UI()self.button_UI()def main_UI(self):self.setFixedSize(WIN_WIDTH, WIN_HEIGHT)self.setWindowTitle("主界面")self.mainWight = QWidget()self.mainLayout = QVBoxLayout()self.mainWight.setLayout(self.mainLayout)self.setCentralWidget(self.mainWight)def button_UI(self):# 各个APP启动按钮# <<<音乐>>>self.musicAppBtn = QPushButton(self)self.musicAppBtn.setStyleSheet("QPushButton{border-image: url(resource/app_music.png)}")self.musicAppBtn.setFixedSize(48, 48)self.musicAppLabel = QLabel(self)self.musicAppLabel.setText("音乐")self.musicAppLabel.setAlignment(Qt.AlignCenter)self.vboxMusicApp = QVBoxLayout()self.vboxMusicApp.addWidget(self.musicAppBtn)self.vboxMusicApp.addWidget(self.musicAppLabel)# <<<视频>>>self.videoAppBtn = QPushButton(self)self.videoAppBtn.setStyleSheet("QPushButton{border-image: url(resource/app_video.png)}")self.videoAppBtn.setFixedSize(48, 48)self.videoAppLabel = QLabel(self)self.videoAppLabel.setText("视频")self.videoAppLabel.setAlignment(Qt.AlignCenter)self.vboxVideoApp = QVBoxLayout()self.vboxVideoApp.addWidget(self.videoAppBtn)self.vboxVideoApp.addWidget(self.videoAppLabel)# 布局self.vboxAppBtnLine1 = QHBoxLayout()self.vboxAppBtnLine1.addStretch(1)self.vboxAppBtnLine1.addLayout(self.vboxMusicApp)self.vboxAppBtnLine1.addStretch(1)self.vboxAppBtnLine1.addLayout(self.vboxVideoApp)self.vboxAppBtnLine1.addStretch(1)self.mainLayout.addStretch(1)self.mainLayout.addLayout(self.vboxAppBtnLine1)self.mainLayout.addStretch(1)
这里使用QPushButton实现按钮功能:
- 通过setStyleSheet方法,设置按钮图标的显示
- 通过QLabel设置图标对应的文字说明,并通过setAlignment方法设置居中对齐
- 按钮图标与文字,通过QVBoxLayout进行垂直布局
多个QPushButton通过QHBoxLayoutt进行水平布局
1.2 进入子界面
界面切换的关键,是通过Qt的信号和槽机制,当图标按钮点击后,启动对应的子功能模块,并关闭主页面。
代码如下:
class mainWindow(QMainWindow): def button_UI(self):# 省略UI布局...# 信号和槽self.musicAppBtn.clicked.connect(self.startMusicApp)self.musicAppBtn.clicked.connect(self.close) self.videoAppBtn.clicked.connect(self.startVideoApp)self.videoAppBtn.clicked.connect(self.close) def startMusicApp(self):print("startMusicApp...")self.w1 = MusicPlayer()self.w1.show()def startVideoApp(self):print("startVideoApp...")self.w2 = VideoPlayer()self.w2.show()
这里的startMusicApp和startVideoApp就是分别启动音乐播放子界面和视频播放子界面。
下面来介绍使用pyQt设计子界面。
2 子界面
设计的Demo子界面如下,点击“返回主界面”按钮,可以返回到刚才的主界面。

2.1 布局
如下是本Demo的音乐播放子界面的布局代码,实际使用时,可根据自己的需要进行修改。
musicPlayer.py
from PyQt5.QtWidgets import QWidget,QHBoxLayout,QVBoxLayout,QPushButton, QLabel, QApplication
from PyQt5.QtCore import Qt
import os, time, sys
from uiDef import *class MusicPlayer(QWidget):def __init__(self):super().__init__()self.showLabel = QLabel(self)self.showLabel.setText("音乐子界面测试")self.showLabel.setAlignment(Qt.AlignCenter)#返回主界面self.homeBtn = QPushButton("返回主界面")#整体布局self.vboxMain = QVBoxLayout()self.vboxMain.addWidget(self.showLabel)self.vboxMain.addWidget(self.homeBtn)self.setLayout(self.vboxMain)self.initUI()# 初始化界面def initUI(self):self.resize(WIN_WIDTH, WIN_HEIGHT)self.setWindowTitle('音乐子界面')self.show()
这里主要用到了QLabel和QPushButton两种控件,并通过QVBoxLayout进行垂直布局。
2.2 返回主界面
返回主界面的关键,同样是通过Qt的信号和槽机制,当点击“返回主界面”后,启动主界面功能模块,并关闭当前页面。
代码如下:
class MusicPlayer(QWidget):def __init__(self):# 省略UI布局...#信号与槽self.homeBtn.clicked.connect(self.returnHome)self.homeBtn.clicked.connect(self.close)# 返回主页def returnHome(self):print("return home")from homeUI import mainWindowself.homeWindow = mainWindow()self.homeWindow.show()
2.3 其它子界面
其它子界面的设计,可参考刚才的音乐播放子界面接口,主要是信号和槽那部分的功能保持不变,实现界面的切换。
其它功能根据自己的实际需要进行修改即可。
例如可以参考音乐播放子界面,再设计一个视频播放子界面。

from PyQt5.QtWidgets import QWidget,QHBoxLayout,QVBoxLayout,QPushButton, QLabel, QApplication
from PyQt5.QtCore import Qt
import os, time, sys
from uiDef import *class VideoPlayer(QWidget):def __init__(self):super().__init__()self.showLabel = QLabel(self)self.showLabel.setText("视频子界面测试")self.showLabel.setAlignment(Qt.AlignCenter)#返回主界面self.homeBtn = QPushButton("返回主界面")#整体布局self.vboxMain = QVBoxLayout()self.vboxMain.addWidget(self.showLabel)self.vboxMain.addWidget(self.homeBtn)self.setLayout(self.vboxMain)#信号与槽self.homeBtn.clicked.connect(self.returnHome)self.homeBtn.clicked.connect(self.close)self.initUI()# 初始化界面def initUI(self):self.resize(WIN_WIDTH, WIN_HEIGHT)self.setWindowTitle('视频子界面')self.show()# 返回主页def returnHome(self):print("return home")from homeUI import mainWindowself.homeWindow = mainWindow()self.homeWindow.show()
3 演示
实际运行Demo程序,效果如下,可以实现主界面和子界面间的互相切换显示:(待补充)
4 总结
本篇介绍了使用pyQt,设置一个简易的多界面切换框架,讲解了其切换的基本原理,并进行了实际效果的展示。
相关文章:
pyQt主界面与子界面切换简易框架
本篇来介绍使用python中是Qt功能包,设置一个简易的多界面切换框架,实现主界面和多个子界面直接的切换显示。 1 主界面 设计的Demo主界面如下,主界面上有两个按钮图标,点击即可切换到对应的功能界面中,进入子界面后&a…...
软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】
软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】 课本里章节里所有蓝色字体的思维导图...
【左程云算法全讲11】贪心算法 并查集
系列综述: 💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于左程云算法课程进行的,每个知识点的修正和深入主要参考…...
CSS中4种关系选择器
元素(标签)之间的关系 父元素:直接包含子元素的元素 子元素:直接被父元素包含的元素 祖先元素:直接或间接包含后代元素的元素,父元素也是祖先元素 后代元素:直接或间接被祖先元素包含的元素,子元素也是后代…...
蓝牙模块(HC-05)与手机连接,蓝牙与蓝牙互联,电脑通过蓝牙控制单片机
任务一:蓝牙与手机连接 所用模块: HC-05蓝牙模块,USB TO TTL手机APP为SPP蓝牙串口 第一章:蓝牙模块配置 一:HC-05与USB TO TTL连接 EN:为使能引脚,一般不接 VCC:接USB TO TTL模…...
安装 eslint 配置指南 及 遇到的一些问题记录
前端eslint配置指南 背景 当前前端项目风格混乱,每个人有自己的开发习惯,有自己的格式化习惯,不便于项目的风格统一,不利于代码维护有的项目eslint没有用起来,没有起到规范代码的作用,导致出现一些基础代码…...
trzsz支持文件拖动到终端进行上传,类似lrzsz
考虑到 LapTop -> Host 1 -> Host 2 -> Docker -> TMUX,使用scp或sftp命令不方便;使用rz和sz命令就会方便很多,但是却又与 TMUX 不兼容(备注:Tmux是一个终端复用工具,允许用户在一个终端窗口中…...
Doris DDL和DML
1 创建用户和数据库 1)创建test用户 mysql -h hadoop1 -P 9030 -uroot -p create user test identified by test; 2)创建数据库 create database test_db; 3)用户授权...
NewStarCTF2023 Reverse方向Week3 ez_chal WP
分析 题目:ez_chal 一个XTEA加密, V6是key,v5是输入,然后v7就是密文。 看了v6,要用动调。 ELF文件用ida的远程调试。 然后在kali上输入长度为32的flag 全部转换成dd 再提取密文。 EXP #include <stdio.h>…...
程序员如何“升级打怪”?我用了这几个“歪瓜”!
不会吧?不会吧?计算机本命专业出身、以及半路出家的,混了几年了,还在新手村?对得起这几年摸的鱼? 思考一下:如何从小白一跃为大师,从此走上人生巅峰、迎娶白富美?变强只…...
模具制造厂ERP都有哪些牌子?模具制造厂ERP有什么用
模具制造通常会涉及物料领用、成品入库、工艺流转、投入水口、配方、模具、生产啤数统计等众多环节,各个环节数据的实时和准确传递,有利于企业清晰掌握订单生产进度,及时调整制造策略等。 有些模具制造工厂采用传统的管理模式,随…...
FPGA语法相关知识合集
一.相关概念 1.四种结构说明语句 2.initial 与 always 的异同点 3.task 与 function 的3个不同点 4.task的语法结构(定义及调用) 5.function的语法结构(定义及调用) 6.function 的一个必须有和一个必须没有,使用规则 7.自动(递归)函数…...
2023年Java核心技术大会(Core Java Week 2023)-核心PPT资料下载
一、峰会简介 人工智能在22年、23年的再次爆发让Python成为编程语言里最大的赢家;云原生的持续普及令Go、Rust等新生的语言有了进一步叫板传统技术体系的资本与底气。我们必须承认在近几年里,Java阵营的确受到了前所未有的挑战,出现了更多更…...
Vue3 源码解读系列(十五)——编译
编译 web 模式的编译主要做了 3 件事: 解析 template 生成 ASTAST 转换生成代码 /*** web 编译* param {string} template - 待编译的模板字符串* param {string} options - 配置对象*/ function compile(template, options {}) {return baseCompile(template, …...
gitlab安装配置及应用
安装 ##安装依赖 yum install -y curl policycoreutils-python openssh-server perl#上传包 rz gitlab-jh-16.5.2-jh.0.el7.x86_64.rpm 安装 yum install gitlab-jh-16.0.3-jh.0.el7.x86_64.rpm 初始化并启动 # 以下两种方法都可以配置访问地址,第一种需要在yum安…...
Docker Volume: 实现容器间数据共享与持久化的利器
文章目录 Docker Volume的作用Docker Volume与容器内数据的比较优势劣势 Docker Volume的创建和管理创建Docker Volume管理Docker Volume 演示Docker Volume的挂载Docker Volume的生命周期安全性考虑与Docker Volume应用场景Docker Volume与多容器协作容器迁移与Docker Volume未…...
redis问题归纳
1.redis为什么这么快? (1)基于内存操作:redis的所有数据都存在内存中,因此所有的运算都是内存级别的,所以性能比较高 (2)数据结构简单:redis的数据结构是专门设计的&…...
改进YOLOv8:结合ConvNeXt V2骨干网络!使用MAE共同设计和扩展ConvNet
🗝️YOLOv8实战宝典--星级指南:从入门到精通,您不可错过的技巧 -- 聚焦于YOLO的 最新版本, 对颈部网络改进、添加局部注意力、增加检测头部,实测涨点 💡 深入浅出YOLOv8:我的专业笔记与技术总结 -- YOLOv8轻松上手, 适用技术小白,文章代码齐全,仅需 …...
基于SpringBoot+Vue的新能源汽车充电桩管理系统
基于SpringBootVue的新能源汽车充电桩管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 充电桩详情 管理员界面 摘要 本项目是基于Spring Boot 和 …...
Linux进程通信——消息队列
概念 消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。 特点 1.消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。(消息队列是结构体) 2.消息队列独立于发送与接…...
MacBook Touch Bar Windows驱动完全指南:解锁跨系统触控交互的终极方案
MacBook Touch Bar Windows驱动完全指南:解锁跨系统触控交互的终极方案 【免费下载链接】DFRDisplayKm Windows infrastructure support for Apple DFR (Touch Bar) 项目地址: https://gitcode.com/gh_mirrors/df/DFRDisplayKm 你是否在MacBook Pro上运行Win…...
从2D到3D NAND:存储技术演进、控制器挑战与未来展望
1. 从平面到立体:一场关于存储密度的极限博弈 十多年前,当道格黄(Doug Wong)在EE Times的访谈中谈及存储行业的未来时,他描绘的图景在今天看来,许多已成为现实,而另一些则仍在深刻的演进之中。那…...
学术数据采集利器crab-scholar:从爬虫原理到科研实战应用
1. 项目概述:一个为学术研究量身定制的数据采集利器如果你是一名研究生、科研人员,或者任何需要从学术网站(比如知网、万方、Web of Science、Google Scholar)上批量获取文献信息的从业者,那你一定对“数据采集”这件事…...
从零构建AI编程伙伴:Cursor最佳实践深度配置指南
1. 项目概述:从零到一,构建你的AI编程伙伴“使用说明书”如果你和我一样,从VSCode切换到Cursor,最初的感觉可能是“这玩意儿真智能”,但用久了,尤其是面对一个复杂项目时,又会陷入新的困惑&…...
苹果签名
...
独立站卖家必读:如何低成本申请毛里求斯专利翻译?保姆级教程
独立站卖家必读:如何低成本申请毛里求斯专利翻译?保姆级教程一、背景介绍及核心要点毛里求斯作为非洲与印度洋区域重要的贸易枢纽,其知识产权保护体系正日益受到跨境卖家的关注。对于独立站卖家而言,在毛里求斯进行专利布局&#…...
杀戮尖塔 1 手机版下载分享2026最新版
《杀戮尖塔》(Slay the Spire)是由 Mega Crit Games 开发的现象级卡牌 Roguelike 游戏,其手机版由官方完整移植,安卓与 iOS 平台均已上线,安卓版曾由腾讯极光计划代理发行,定名《尖塔奇兵》,核心…...
别再傻傻打全称了!LaTeX/BibTeX用户如何一键搞定IEEE引用格式(含期刊会议缩写库)
LaTeX/BibTeX高效引用:IEEE期刊会议缩写自动化解决方案 引言 每次在LaTeX论文中引用IEEE文献时,你是否都要手动输入完整的期刊会议名称?当参考文献列表中出现格式不统一的缩写时,审稿人会不会皱眉?作为计算机、电子工程…...
基于LLM的AI安全助手:hackingBuddyGPT框架设计与实战
1. 项目概述:当安全研究员拥有一个AI助手如果你是一名网络安全从业者,或者对渗透测试、红队攻防感兴趣,那么你一定对日常工作中那些重复、繁琐但又至关重要的任务感到熟悉:一遍遍地扫描端口,手动测试各种漏洞利用链&am…...
OpenAI发布三款音频模型,差异化布局欲“通吃”语音AI市场,企业用户已抢先测试
模型分工与价格昨天凌晨,OpenAI发布了GPT-Realtime-2、GPT-Realtime-Translate和GPT-Realtime-Whisper三款音频模型。官网称新模型可让开发者构建实时语音产品,且已开放测试。这次更新重点是模型场景分工,GPT-Realtime-2面向实时语音Agent场景…...
