PyQt5利用Qt designer(QT设计师)使用tab widget和stacked widget实现多页面切换

article/2025/10/21 14:36:16

PyQt5 Qt designer QT设计师 使用tab widget和stacked widget实现多页面切换

  • 一、使用Qt designer(QT设计师)进行多页面切换ui设计
  • 二、实现tab widget多页面切换
  • 三、实现stacked widget多页面切换
  • 四、生成代码
  • 五、运行效果

一、使用Qt designer(QT设计师)进行多页面切换ui设计

本文只提供一种设计思路来完成简单的页面切换功能,并没有涉及页面的美化以及复杂的业务功能实现。

点击tab页对tab widget的tab页进行切换效果图:
20221220004200

点击radio button驱动stacked widget多页面切换效果图:
20221220004326

下面进行分步说明。

打开qt designer,新建一个widget窗口。
20221219235035

将一个tab widget拖入其中

20221219235147

在窗口内空白部分点击右键,选择布局中的垂直布局
20221219235252

20221219235322

tab widget默认只有2个tab,如果需要更多的话,可以按照需求自行插入新的tab页。比如这里想在tab2后面再插一个tab3,那么选中tab2,然后右键点击,选择在当前页之后插入
20221219235515

tab页的标题根据自己的需求进行调整
20221219235551

下面我们主要对tab1进行主要的设计,以此说明原理

在tab1上拖入一个Scroll Area,准备在里面放3个部分内容。以便拖动展示。
20221219235805

设置Scroll Area的大小
20221219235844

在Scroll Area内,放入3个Frame,表示3个模块
20221219235931

点击Scroll Area, 对其进行垂直布局,这样3个Frame就可以变整齐了
20221220000053

将3个Frame的拉伸比例设置为1:1:1
20221220000313

依次点击每个Frame,右键单击,选择改变样式表,为其添加背景色,这样3个Frame就可以很容易肉眼区分了
20221220000457

20221220000509

效果如下:
20221220000525

然后我们针对第一个Frame进行设计,其他两个Frame,以此类推,这样就可以通过每个Frame展示不同的内容。

在Frame1中拖入一个Stacked Widget, 用于展示3个不同的页面
20221220000700

再拖入一个Widget, 用于放置3个按钮
20221220000805

选中Frame1,对其进行垂直布局
20221220000843

将widget的高度设为30
20221220000934

然后拖动3个radio button到这个widget里,并将它们的最大高度和宽度都设为16
20221220001220

右键单击widget,对其进行水平布局
20221220001257

然后再在widget内这3个按钮的两侧分别放置两个水平弹簧, 就可以将3个radio button压缩到正中间
20221220001427

因为我们有3个radio button,stacked widget默认提供2个页面,我们再加一个,方法同上面tab widget加页面是一样的, 这三个radio button分别对应stacked widget中的3个页面
20221220001545

我们给stacked widget中的三个page页面分别添加一张图片,以示区分。添加完成后,此时,点击右上角那两个前后箭头,应该可以看到页面能正常切换
20221220001752

这里关于怎么添加资源文件,就不赘述了。我们这里是新建了一个资源文件,名字叫resource, 对应的文件就是下文提到的resource.qrc
20221220004028在为Frame添加了图片之后,原来的背景色就被我删掉了。所以后面运行时看不到之前添加的背景色了。

多页面切换的ui设计示例就到此结束了。目前还缺少页面切换功能的实现。

二、实现tab widget多页面切换

它的实现比较简单,在ui页面,添加对应的信号和槽函数即可。
信号是currentChanged(int), 槽函数是setCurrentIndex(int)

20221220002244

三、实现stacked widget多页面切换

stacked widget的多页面切换,我们是通过3个radio button来驱动的,点中哪个radio button,就切换到stacked widget的对应某个页面。

为此,我们也需要设置stacked widget的信号和槽,和上面tab widget一样。信号是currentChanged(int), 槽函数是setCurrentIndex(int)

20221220002543

但是怎么和radio button关联呢,为此我们还需要手动负责currentChanged(int)信号的发射。这将在代码中体现。

四、生成代码

首先,将资源文件resource.qrc和ui文件my_tab_widget.ui转换为py格式。

# 将qrc资源文件编译为二进制文件
pyrcc5 -o resource_rc.py resource.qrc# 将ui文件生成为相关的类
pyuic5 -o my_tab_widget.py my_tab_widget.ui

这里我们生成了resource_rc.py和my_tab_widget.py

20221220002815

需要注意的是,由于我们的资源文件名为resource.qrc,在执行以下转换命令之后

pyuic5 -o my_tab_widget.py my_tab_widget.ui

生成的my_tab_widget.py最后,会自动生成一句:

import resource_rc

所以我们在转换资源文件resource.qrc时,需要将其名称指定为resource_rc.py, 否则在程序运行时,会报错,提示找不到resource_rc模块。

这些工作做完后,我们新建一个main.py, 内容如下:
main.py

from PyQt5.QtWidgets import QApplication, QWidget
import sys
from my_tab_widget import Ui_Formclass MyUI(QWidget, Ui_Form):def __init__(self):super().__init__()super().setupUi(self)# 这里我们将radio button的clicked信号,绑定到自定义的槽函数上self.radioButton.clicked.connect(self.radioButton_click_handler)self.radioButton_2.clicked.connect(self.radioButton_2_click_handler)self.radioButton_3.clicked.connect(self.radioButton_3_click_handler)# 自定义的槽函数,用于发射stackedWidget的currentChanged信号,来驱动页面的切换def radioButton_click_handler(self):self.stackedWidget.currentChanged.emit(0)def radioButton_2_click_handler(self):self.stackedWidget.currentChanged.emit(1)def radioButton_3_click_handler(self):self.stackedWidget.currentChanged.emit(2)if __name__ == '__main__':app = QApplication(sys.argv)my_widget = MyUI()my_widget.show()sys.exit(app.exec_())

在main.py里,我们自定义了一个MyUI类,继承自我们设计的ui界面,并在其中将radio button的clicked信号绑定到自定义的槽函数上,用于发射stackedWidget的currentChanged信号,以此驱动stackedWidget的页面切换。

五、运行效果

点击tab页对tab widget的tab页进行切换:
20221220004200

点击radio button驱动stacked widget多页面切换:
20221220004326


http://chatgpt.dhexx.cn/article/oKlKr3ZR.shtml

相关文章

Qt漂亮界面

Qt漂亮界面 功能规划:一、去掉菜单栏和工具栏二、顶部导航栏的设计appinit.h头文件appinit.cpp的文件使用方式: 三、阵列按钮的点击事件写法四、重写缩写界面、放大界面和关闭程序事件五、鼠标事件的处理Qt大量同类控件的操作正则表达式的设计Qt 手把手教…

PyQt5 Qt Designer 新手教程(一)—— 软件界面介绍

PyQt5 Qt Designer 新手教程(一)—— 软件界面介绍 教程博文 一、前言 终于学到了 PyQt5 Qt 设计师(Qt Designer)这个软件,博主感觉心情还是很激动的。因为,当初学 PyQt5 ,想要设计一个窗体时…

qt界面设计

设计界面时大概可以分三步: 构造出需要的所有控件通过布局管理器确定控件位置通过样式表优化控件样式 1.布局管理器 1. QBoxLayoutQHBoxLayout 水平布局QVBoxLayout 垂直布局1)setStretch 设置部件的拉伸系数2)setSpacing 设置部…

QTDesigner简介

1、QTDesigner简介: 手写代码工作量大、代码结构容易搞得混乱。 设计工具:直观、高效,工作量小,方便调试。界面和逻辑分离后期好维护。 介绍:(实现了视图和逻辑的分离,开发代码更容易分离&…

PyQt5:使用QT设计师设计界面

一. 界面设计 登录预览: 图1.1 设计界面 界面文件 可以在这里下载login.ui文件 资源文件 除了ui文件,有时候需要使用到资源: 图片资源 窗体图标(login.png): .qrc文件 可以在这里下载.qrc文件,文件内容如下&#xff1…

Python PyQt5 Qt Designer (Qt设计师)

PyQt5 Qt Designer (Qt设计师) 本文由 Luzhuo 编写,转发请保留该信息. 原文: https://blog.csdn.net/Rozol/article/details/87705426 PyQt5是对Qt所有类进行封装, Qt能开发的东西, PyQt都能开发. Qt是强大的GUI库之一, 用C开发, 并且跨平台. PyQt双许可证, 要么选择GPL(自由软…

Qt Designer简介

来源 http://www.python3.vip/tut/py/gui/qt_03/ 回顾 在前面的程序中,我们学习了怎么样用程序来把QT程序界面的 一个个窗口、控件创建出来 问题分析 QT程序界面的 一个个窗口、控件,就是像上面那样用相应的代码创建出来的。 但是,把你…

Unity资源打包(AssetBundle)

一、AssetBundle的定义和作用 定义: - 它是一个存在于硬盘上的文件。可以称之为压缩包。这个压缩包可以认为是一个文件夹,里面包含了多个文件。这些文件可以分为两类:serialized file 和 resource files。(序列化文件和源文件&a…

游戏开发unity资源管理系列:unity不支持长路径;DirectoryNotFoundException: Could not find a part of the path ““

说明: 使用Addressables打包出现如下报错 DirectoryNotFoundException: Could not find a part of the path "" 打断点发现资源路径与目标路径字符串非空,但是仍然提示报错。Library\com.unity.addressables下ab资源打出,但是仍然报…

Unity资源包共享

unity最全材质球的资源包 unity家具包装设计资源包 unity游戏模型资源包 unity人物模型资源包 unity枪模型资源包 … … … 其中一部分 有需要的朋友下方评论留下邮箱号,我发给你们,文件太大无法上传

Unity资源替换工具,旧模型替换新模型,替换GUID,替换meta文件,文件丢失等问题

Unity资源替换工具,旧模型替换新模型,替换GUID,替换meta文件,文件丢失等问题 使用说明如何使用 使用说明 第一次写,不是很规范,好东西分享给大家,学点编辑器扩展好处多啊! 如何使用 这个小工具确实帮到我了,替我省了不少时间 直接上代码: using UnityEngine; using System.…

unity网络资源导入

1、找到需要导入的文件,这里导入fbx格式 2、打开unity界面,在Asset目录下创建文件夹FBX,将需要导入的fbx预制体或整个文件夹拖入创建的FBX文件夹下 3、选中需要的fbx预制体并拖至场景中 4、双击定位到当前物体 5、找到需要导入的贴图文件text…

Unity 查找资源引用

当我们想要查找某个资源的引用情况时,可以使用文末的工具类 使用方法 先将我们的工具类放到项目中,放在哪里都可以。选中要查找的资源,右键选中的资源(资源类型没有限制),在弹出的选项中选择查找资源引用,如图一所示…

Unity资源管理——AssetBundle构建/打包

1、为资源设置 assetBundleName 和 assetBundleVariant。 可以在资源的 Inspector 上手动设置,也可以通过 AssetImporter 进行设置。 AssetImporter importer AssetImporter.GetAtPath(assetPath); importer.assetBundleName abName; importer.assetBundleVarian…

unity资源优化插件

转载 来自:http://blog.uwa4d.com/archives/Resource_Plugin.html 工欲善其事必先利其器。在Unity官网的Asset Store上有不少给力的资源插件,能帮助我们减少人力资源消耗的同时,更快更好地驾驭引擎。今天我们就从善用资源的角度,推…

Unity常见资源类型

资源工作流程 在Unity项目中有一个固定的文件夹—Assets文件夹。 Assets是放项目需要到的文件资源的,比如:图片文件、3D模型文件(*.FBX格式)、音频等。 资源文件是可能来自 Unity 外部创建的文件,例如 3D 模型、音频…

反编译apk获取unity资源流程分享

什么时候需要这样做? 遇到真机问题,如资源丢失检查,可能需要直接拆开对应的包来确认资源是否存在,打包是否没打进去。例如检查某个tdr表格是否没有打进包里面,或者检查包里某个资源版本是不是不对 看到其他做的很好的游戏&…

【Unity 资源分享】☀️ | Unity 华丽炫酷特效资源分享!万年魂环拿到手软,让你直达封号斗罗~

📢博客主页:https://blog.csdn.net/zhangay1998📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉📢未来很长&a…

unity资源释放(AssetBundle和Asset)

本节主要叙述下,资源的释放问题。 1、我们准备了下两个资源,并且要做打包处理。 代码的代码,很简陋,只是为了说明问题。代码如下: using System.Collections; using System.Collections.Generic; using UnityEngine…