12. PyQt5实现多页面切换之QTabBar

news2025/2/28 19:54:10

PyQt5 QTabBar 类

  1. QTabBar 类直接继承自 QWidget。该类提供了一个选项卡栏,该类仅提供了一个选项卡,
    并没有为每个选项卡提供相应的页面,因此要使选项卡栏实际可用,需要自行为每个选项
    卡设置需要显示的页面,可以通过 QStackedLayout 布局为选项卡提供页面,另外 Qt 也提
    供了一个现成的选项卡部件 QTabWidget。

  2. 创建选项卡栏的步骤,如下:

my_tabbar = QTabBar()
my_tabbar.addTab('AAA')
my_tabbar.addTab('BBB')
  1. QTabBar 类的属性
    20221120013822
    20221120013929
    20221120013951
    20221120014011

  2. QTabBar 类中的方法

参考 https://www.riverbankcomputing.com/static/Docs/PyQt5/api/qtwidgets/qtabbar.html?highlight=qtabbar

  1. QTabBar 类中的信号
  • void currentChanged(int index);
    当选项卡栏上的当前选项卡发生更改时发送此信号, index 为新选项卡的索引,若没有新的索引,则为−1(比如 QTabBar 中没有选项卡)。该信号比较重要。
  • void tabBarClicked(int index);
  • void tabBarDoubleClicked(int index);
    以上信号表示,单击或双击 index 处的选项卡时发送此信号, index 是单击选项卡的索引,若光标下没有选项卡,则为−1。
  • void tabCloseRequested(int index);
    当点击选项卡上的关闭按钮时发送此信号, index 为应删除的选项卡的索引。
  • void tabMoved(int from, int to);
    当选项卡已经从索引 from 处移动到索引 to 处时,发送此信号,注意:当信号从选项卡栏发出时, QTabWidget 会自动移动页面。

使用 QTabBar 类和 QStackedLayout 布局实现多页界面切换代码示例:

from PyQt5.QtWidgets import QApplication, QWidget, QTabBar, QPushButton, QRadioButton
from PyQt5.QtWidgets import QStackedLayout, QVBoxLayout, QHBoxLayout
import sys

class MyTabBar(QTabBar):
  def __init__(self):
    super().__init__()

  def move_tab_handler(self):
    '''
    槽函数, 把选项卡从索引0移到索引2处
    '''
    super().moveTab(0, 2)

if __name__ == '__main__':
  app = QApplication(sys.argv)

  # 顶层窗口部件
  my_widget = QWidget()

  # 创建3个tab页
  my_tabbar = MyTabBar()
  my_tabbar.addTab('tabA')
  my_tabbar.addTab('tabB')
  my_tabbar.addTab('tabC')

  # 创建一些子部件
  move_tab_btn = QPushButton('moveTab')
  page1_radio1 = QRadioButton('A1')
  page1_radio2 = QRadioButton('A2')
  page2_radio1 = QRadioButton('B1')
  page2_radio2 = QRadioButton('B2')
  page3_radio1 = QRadioButton('C1')
  page3_radio2 = QRadioButton('C2')

  # 创建容器
  page1_widget = QWidget(my_widget)
  page2_widget = QWidget()
  page3_widget = QWidget()

  # 将三个容器放入QStackedLayout布局中,这样容器和选项卡就可以通过信号和槽进行关联了
  my_stacked_layout = QStackedLayout()
  my_stacked_layout.addWidget(page1_widget)
  my_stacked_layout.addWidget(page2_widget)
  my_stacked_layout.addWidget(page3_widget)

  # 容器1布局
  vbox_layout1 = QVBoxLayout()
  vbox_layout1.addWidget(page1_radio1)
  vbox_layout1.addWidget(page1_radio2)
  page1_widget.setLayout(vbox_layout1)

  # 容器2布局
  vbox_layout2 = QVBoxLayout()
  vbox_layout2.addWidget(page2_radio1)
  vbox_layout2.addWidget(page2_radio2)
  page2_widget.setLayout(vbox_layout2)

  # 容器3布局
  vbox_layout3 = QVBoxLayout()
  vbox_layout3.addWidget(page3_radio1)
  vbox_layout3.addWidget(page3_radio2)
  page3_widget.setLayout(vbox_layout3)

  # 为QPushButton使用QHBoxLayout, 此布局内只有一个按钮
  hbox_layout = QHBoxLayout()
  hbox_layout.addWidget(move_tab_btn)

  # 将hbox_layout、 my_tabbar, my_stacked_layout 放到容器内
  top_vbox_layout = QVBoxLayout()
  top_vbox_layout.addLayout(hbox_layout)
  top_vbox_layout.addWidget(my_tabbar)
  top_vbox_layout.addLayout(my_stacked_layout)
  my_widget.setLayout(top_vbox_layout)

  # 关联信号和槽,实现多页面切换,这是关键步骤
  my_tabbar.currentChanged[int].connect(my_stacked_layout.setCurrentIndex)
  move_tab_btn.clicked.connect(my_tabbar.move_tab_handler)

  my_widget.show()
  sys.exit(app.exec_())

执行效果如下:

20221120154457
20221120154522
20221120154540

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

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

相关文章

【k8s】6、pod详解

文章目录一、pod介绍1、pod的基础概念2、pod定义(资源清单)二、Pod中的容器配置1、基本配置2、镜像拉取(imagePullPolicy)3、启动命令(command)4、环境变量(env)5、端口设置&#xf…

应急响应-计划任务排查

计划任务排查 由于很多计算机都会自动加载“计划任务”,“计划任务”也是恶意病毒实现持久化驻留的一种常用手段,因此在应急响应事件排查时需要进行排查。通俗的讲会定期执行某些操作。 Windows计划任务排查 任务计划是Windows系统的一个预置实现某些…

【数据结构】二叉树的顺序存储结构 —— 堆

文章目录前言二叉树的顺序存储堆的概念和结构堆的实现结构的定义接口总览初始化销毁插入向上调整删除向下调整取堆顶数据计算堆大小判空打印堆完整代码Heap.hHeap.ctest.c结语前言 今天,我们开始二叉树的学习。本篇博客的内容为 介绍二叉树的顺序存储 和 堆的实现。…

【滤波跟踪】基于matlab不变扩展卡尔曼滤波器对装有惯性导航系统和全球定位系统IMU+GPS进行滤波跟踪【含Matlab源码 2232期】

⛄一、简介 针对室内定位中的非视距(Non-Line-of-Sight,NLOS)现象,提出一个新型算法进行识别,同时有效缓解其影响.主要通过超宽带(Ultra-Wideband,UWB)定位系统与惯性导航系统(Inertial Navigation System,INS&#x…

酒店管理系统的设计与实现

Word下载链接如下: https://download.csdn.net/download/yw1990128/87096359 一 设计背景 1.1 课题现状 随着国家社会经济水平的提升,各酒店的发展速度越来越快,入住人员也越来越多。酒店房间的管理要求也愈来愈大,所以很多酒店正…

45.Django模板

1.django模板配置 1.1 Django模板概述 作为一个Web框架,Django需要一种方便的方式来动态生成HTML。最常用的方法依赖于模板。模板包含所需HTML输出的静态部分以及描述如何插入动态内容的特殊语法。 ​ 对模板引擎的一般支持和Django模板语言的实现都存在于 djang…

Linux下的NFS服务(包含windows10下的nfs搭建)

目录 1.NFS服务介绍 2.Linux下搭建NFS服务 (1)下载NFS服务端 (2)新建一个共享文件 (3)修改NFS服务配置文件 (4)重新启动NFS服务 (5)显示查看共享的文件…

38、常用类之String类

1、基本介绍: String s5new String(byte[] b); (5)String实现了Serializable,说明String可以串行化,即可以网络传输 String实现了Comparable,说明String对象可以比较 (6&#xff0…

JavaScript基础(13)_原型、原型对象

上一章构造函数确实简化了多个对象创建的麻烦问题,但是:构造函数每创建一个实例,构造函数就会执行一次,将属性和方法添加到该对象,每个对象实例化后地址互不相同,即使它们的方法所实现的逻辑和功能一样&…

pytorch初学笔记(八):神经网络之卷积操作

目录 一、卷积操作 二、二维卷积操作 2.1 torch.nn.functional 2.2 conv2d方法介绍 2.2.1 使用该方法需要引入的参数 2.2.2 常用参数 2.2.3 关于对input和weight的shape详解 三、代码实战 3.1 练习要求 3.2 tensor的reshape操作 3.3 不同stride的对比 3.4 不同pad…

Docker面试

1. Docker和虚拟机的区别? 虚拟机Virtual Machine与容器化技术(代表Docker)都是虚拟化技术,两者的区别在于虚拟化的程度不同。 隔离性 由于vm对操作系统也进行了虚拟化,隔离的更加彻底。而Docker共享宿主机的操作系统…

数字化转型总体需求

基于“两型三化九力”对企业数字化的要求,以建设产品全生命周期管理平台为手段和途径,打通设计、工艺、制造及交付服务的全生命周期的数字线,实现数字化设计、数字化仿真、数字化制造、数字化服务及数字化管理,未来以此为基础实现…

【计算机毕业设计】11.毕业生信息管理系统+vue

一、系统截图(需要演示视频可以私聊) 摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 毕业生信息招聘平台,主要的模块包括查看管理员;首页、个…

zk常用命令ls、ls2、get、stat,参数意思(重补早期学习记录)

前言:补学习记录,几年前写一半丢草稿箱,突然看到,有强迫症所以补完 1.连接zk客户端(进入zk后台) ./zkCli.sh 连接成功 使用help查看有哪些命令可以使用 试试ls和ls2的区别 ls显示指定路径下的目录 ls2不仅可以 显示指定路径下的目录,还可以显示该节点的相关状态信息…

OpenGL 单色

目录 一.OpenGL 单色图 1.IOS Object-C 版本1.Windows OpenGL ES 版本2.Windows OpenGL 版本 二.OpenGL 单色 GLSL Shader三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >…

非关系型数据库MongoDB是什么/SpringBoot如何使用或整合MongoDB

写在前面: 继续记录自己的SpringBoot学习之旅,这次是SpringBoot应用相关知识学习记录。若看不懂则建议先看前几篇博客,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 3.4.3.3 Mongodb 3.4.3.3.1 介绍 MongoDB是一个开…

【Tomcat专题】Tomcat如何打破双亲委派机制?

文章目录类加载器双亲委派机制双亲委派的好处Tomcat的类加载器loadClass总体加载步骤:类加载器 三种JDK内部的类加载器 启动类加载器(BootStrap ClassLoader) 负责加载JRE\lib下的rt.jar、resources.jar、charsets.jar包中的class。 扩展…

一文带你搞懂sklearn.metrics混淆矩阵

一般的二分类任务需要的评价指标有4个 accuracyprecisionrecallf1-score 四个指标的计算公式如下 计算这些指标要涉及到下面这四个概念,而它们又构成了混淆矩阵 TP (True Positive)FP (False Positive)TN (True Negative)FN (False Negative) 混淆矩阵实际值01预测…

周杰伦腾格尔晚上八点同时开线上演唱会,究竟是巧合还是刻意安排

从日历上面看,2022年11月19日,是一个再平凡不过的日子,不过有了周杰伦和腾格尔的加持,这个平凡的日子也变得不平凡了。根据腾格尔老师本人透露,他准备在11月19日,在某音平台开启线上演唱会,为歌…

智慧实验室解决方案-最新全套文件

智慧实验室解决方案-最新全套文件一、建设背景二、建设架构智慧实验室建设核心目标三、建设方案四、获取 - 智慧实验室全套最新解决方案合集一、建设背景 当前高校和中小学的智慧校园建设正如火如荼地进行中,智慧实验室建设属于“智慧校园”建设的重要组成部分之一…