第15.32节 PyQt(Python+Qt)入门学习:containers容器类部件QToolBox工具箱介绍及使用案例

【Qt控件之QToolBox】介绍及使用 `QToolBox`类提供了一个列式的带有选项卡的小部件条目。工具箱是一个小部件,以一个列式的选项卡显示在上方,并在当前选项卡下方显示当前的小部件条目。每个选项卡在选项卡列中有一个索引位置。选项卡的小部件条目是一个`QWidget`。 阅读详情

一、概述

容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有如下:
在这里插入图片描述

toolBox工具箱是一个容器部件,对应类为QToolBox,在其内有一列从上到下顺序排列的标签部件项(tabbed widget item),每个标签部件项都有一个索引位置,位置索引是从上到下从0开始的顺序数字。每个标签部件项同时对应一个QWidget或其派生的部件,当对应标签部件项被选中时,就在该每个标签部件项下显示该每个标签部件项对应的部件即标签部件。下图是同一个工具箱分别选中前三个不同的标签部件项的截图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看出,工具箱部件由多个标签项构成,每个标签项包括一个标签和对应的部件,这些部件可以是任何QWidget或其派生的部件,只是部件的标题栏会被隐藏。工具箱的每个标签就等他于真正的工具箱的手柄,鼠标点击后就会弹出对应的标签项。

二、toolBox的属性

在Designer中,toolBox主要有如下属性:
在这里插入图片描述
可以看到,toolBox的属性很少也很简单,主要包括如下属性:

  • currentIndex:当前选择项的索引,从0开始计数,如果无标签部件项,则为-1,可以通过currentIndex()和setCurrentIndex(int index)方法进行属性的访问
  • currentItemText:当前项的文本,该属性在QToolBox中并没有,实际上是使用的QToolBox的itemText属性,可以通过方法itemText(index)和setItemText(index, str text)来进行访问,只是index的值使用currentIndex即可
  • currentItemName:当前项的名字,该属性在QToolBox中并没有,实际上是使用的QToolBox的QWidget(index)的objectName属性,可以通过方法QWidget()的setObjectName(name)和objectName()方法来访问
  • currentItemIcon:当前项的图标,该属性在QToolBox中并没有,实际上是使用的QToolBox的itemIcon属性,可以通过方法itemIcon(int index)和setItemIcon(int index, QIcon icon),只是index的值使用currentIndex即可
  • currentItemToolTip:当前项的图标,该属性在QToolBox中并没有,实际上是使用的QToolBox的itemToolTip属性,可以通过方法itemToolTip(int index)和setItemToolTip(int index, str toolTip),只是index的值使用currentIndex即可
  • tabSpacing:每个标签项之间的间距,该属性在QToolBox中并没有,实际上是使用的QToolBox的布局的spacing属性,该属性通过布局的spacing() 、setSpacing(int)来访问和设置。

三、标签部件项(tabbed widget item)相关方法

每个标签部件项项都有一个项文本itemText(如“通讯录”、“日历”等)、一个可选项图标(项文本左边的图标)、一个可选itemToolTip提示信息和一个标签部件。可以使用setItemText()、setItemIcon()和setItemToolTip()更改项的这些属性。可以使用setItemEnabled()单独启用或禁用每个项。

使用addItem()添加项,或使用insertItem()在特定位置插入项。项目总数由count()给定。可以使用removeItem()从工具箱中删除项。
当前项的索引由currentIndex()返回,可使用setCurrentIndex()更改当前项。可以使用indexof()带部件对象作为参数找到该部件项对应的项的索引,也可以通过索引作为参数使用widget()方法获取标签部件项返回。

四、toolBox编程使用的步骤

使用toolBox开发应用时,通过Designer设计ui界面时,只能在Designer中设计toolBox放置的位置以及增加标签(包括设定项名称、标签的文本、图标和工具提示信息)以及指定当前项,但无法指定标签部件项对应的部件。因此如果要结合Designer来进行工具箱的应用开发,可以借鉴如下步骤:

  1. 设计UI界面,并放置toolBox;
  2. 在ui中鼠标右键选中toolBox,通过“insert page”添加项,并指定项的项名称、标签的文本、图标和工具提示信息。当然如果嫌麻烦或者需要动态生成标签部件项也可以跳过本步骤;
  3. 为标签部件项指定对应部件
    本步骤只能通过代码实现,如果步骤2未执行,则直接使用insertItem和addItem方法进行项的增加,否则需要先使用removeItem()删除对应项再使用insertItem和addItem方法进行项的增加,所以步骤2其实执行后更麻烦,唯一的好处是能预览界面的情况,且标签的文本、图标和tooltip直接获取原来标签的即可无需在代码中指定。
注意:

在调用insertItem和addItem方法时,其QWidget参数为标签部件项下面要显示的部件实例,如上面截图三个项分别是一个自定义窗口、一个QCalendarWidget日历部件、一个QLCDNumber电子显示屏部件,直接用这些对象实例作为参数传递给insertItem和addItem方法。

例如设定电子显示屏显示当前时间的示例代码如下:

	clock = QtWidgets.QLCDNumber()
    time = QtCore.QTime().currentTime()
    clock.display(time.toString("hh:mm"))
    icon = QtGui.QIcon(r"c:\temp\icon2.gif")
    self.toolBox.addItem(clock, icon, '时钟')

五、案例:利用QToolBox开发的桌面工具箱

5.1、引言

本部分将介绍老猿使用QToolBox实现的一个测试用Demo,实现一个桌面工具箱,在桌面工具箱中提供了通讯录、日历、时钟、记事本、图片显示五个工具。

5.2、UI设计

下图为该工具箱的UI设计:
在这里插入图片描述
包含了上面所介绍的五个标签,在UI界面就设计标签部件项,其实在转换成代码后更麻烦,唯一的好处是能预览界面的情况,且标签的文本、图标和tooltip直接获取原来标签的即可无需在代码中指定,但本Demo还是基于在UI中设计好标签部件项便于演示,但后续代码实现稍微复杂。

另外还有一个通讯录展示的窗口:
在这里插入图片描述

5.3、使用PyUIC生成UI对应代码文件

生成ui_toolBoxTest.py为应用主界面、ui_showPersons.py为通讯录展示窗口。

5.4、派生通讯录管理类personListWin
class personListWin(QtWidgets.QWidget,ui_showPersons.Ui_personListWin):
    def __init__(self,memberList=None):
        super().__init__()
        self.setupUi(self)
        if memberList:self.addMembers(memberList)

    def addMembers(self,memberList):
        self.itemList.addItems(memberList)

之所以派生该类是为了实例创建时可以直接添加成员。

5.5、定义数字时钟类DigitalClock

数字时钟从QtWidgets.QLCDNumber派生,实时显示时间:

class DigitalClock(QtWidgets.QLCDNumber):
    def __init__(self):
        super().__init__()
        self.setDigitCount(8) #显示8个字符
        self.timer =   QtCore.QTimer(self)
        self.timer.timeout.connect( self.showTime) #连接每秒触发一次的计时信号和showTime方法
        self.timer.start(1000)
        self.showTime()  #显示当前时间
        
 	def showTime(self):#在lcd界面上显示时间
        ......        

5.6、从UI界面类派生主界面类

派生类中做了如下几件事情:
1、为每个标签部件项构建对应功能部件widget;
2、将原来UI设计的标签部件项的text、icon、tooltip取出来后删除原项;
3、根据text、icon、tooltip、widget创建新项。

class mainWindow(QtWidgets.QWidget,ui_toolBoxTest.Ui_mainWin):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.initToolItemList() #初始化五个标签部件项

    def setItem(self,index,widget):
       
        ......
        self.toolBox.insertItem(index, widget, icon, itemText)
       
   
    def initToolItemList(self):
        #从最后一个项开始绑定对应widget对象
        count = self.toolBox.count()
        current = self.toolBox.currentIndex() #保存当前选择项

        for loop in range(count):
            index = count-loop-1

            if index == 0:
                item = personListWin(['陈佳妮', '许姮', '王二妮', '冯华','吕程', '李诞', '郑菱', '孙蒿', '杨枼', '朱酷安','吴勇', '李晖', '铎铎', '老聂', '老杨', '陈老师', '老余']) #创建通讯录部件
            elif index == 1:
                item = QtWidgets.QCalendarWidget() #创建日历部件
            elif index == 2:
                item = DigitalClock() #创建数字时钟部件
            elif index == 3:
                item = QtWidgets.QTextEdit('8:30 晨会') #创建记事本部件
                item.append('9:30 项目方案讨论')
                item.append('14:30 督办跟踪')
                item.append('16:00 OA文及邮件处理')
            else:
                view = QtWidgets.QGraphicsScene()  #创建图片展示部件

                view.addPixmap(QtGui.QPixmap(r"F:\屏保图片\壁纸20141214215651.jpg"))
                view.addText("Hello, world!")
                item = QtWidgets. QGraphicsView( view)
            self.setItem(index,item) #将item绑定到标签部件项的部件

        self.toolBox.setCurrentIndex(current) #恢复当前选中项
5.7、运行界面截图

在这里插入图片描述

在这里插入图片描述

六、小结

一个工具箱由多个标签项和对应页面部件构成,标签项从上到下顺序排列,当前项的页面展示在当前标签项下面。本节介绍了toolBox工具箱的属性、方法和信号,最后通过一个案例介绍了完整的工具箱开发过程,有助于大家理解对工具箱应用的开发步骤。

广告

老猿关于PyQt的付费专栏《使用PyQt开发图形界面Python应用》只需要9.9元,该部分与第十五章的内容基本对应,但同样内容在付费专栏上总体来说更详细、案例更多。本节内容对应付费专栏的《第二十六章、containers容器类部件QToolBox工具箱详解》。如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

【Qt笔记】QToolBox控件详解 QToolBox是Qt框架中一个非常实用的容器控件,它提供了一种类似于标签页(Tab Widget)但布局更加紧凑的界面组织方式。 阅读详情

相关推荐

PyQt入门学习:QToolBox工具箱介绍及使用案例

我们学习了如何创建一个QToolBox实例,添加页面以及设置页面的标题和内容。在上面的示例中,我们首先获取页面的索引,然后使用setItemText()方法设置页面的新标题。接下来,我们创建一个包含标签的QWidget实例widget,并设置为页面的内容部分。在上面的示例中,我们创建了一个QToolBox实例tool_box,并使用addItem()方法添加了三个页面。我们可以通过获取页面的索引,然后使用setItemText()方法设置页面的标题,使用setItemWidget()方法设置页面的内容。

HackQuestR的博客 608

PyQt6 QToolBox工具盒控件

QToolBox控件又称为工具盒控件,它主要提供一种列状的层叠选项卡。

java1234的博客 702

PyQt学习笔记:工具箱和标签部件的用途及功能介绍

在PyQt中,工具箱(Toolbox)是一个常用的界面元素,用于组织和显示多个相关的工具或选项。工具箱通常作为一个侧边栏或者标签页的形式出现,让用户可以方便地在不同的选项之间切换和选择所需的工具。另外,标签部件(Tab Widget)也是一个常见的界面组件,用于在一个窗口中显示多个标签页,每个标签页上可以放置不同的内容。工具箱和标签部件是PyQt中常用的界面元素,用于组织和显示多个相关的工具或选项以及在一个窗口中显示多个标签页。标签部件是一个常见的界面组件,用于在一个窗口中显示多个标签页。

ByteHero的博客 315

PyToolBox——极简,为你。

PyToolBox——一个工具箱 这,是一个用Python写成的工具箱。 它支持安装软件包,还有一个精美的图形界面。 它是一个离线程序,因此您不用网络也能愉快使用。 它的占用很少,老电脑也能运行。 它有一个软件包仓库,您可用从中下载任何软件包。但是它不包含在工具箱中,它是一个单独的Gitee仓库。 它,就是PyToolBox。 这是ALIN聚合,提供了一个便捷的操作界面。一目了然,拒绝“迷茫”。 这是一个内置的软件包,PyMusic Player.支持打开文件夹或播放单曲。 ...

jetson_nano_User的博客 512

QToolBox工具盒类

QToolBox提供一种列状的层叠窗体,提供了一种快速访问命令或选择项的按钮,通常在工具条中使用。示例通过QToolBox类的使用,实现类似的抽屉效果。

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 464

第二十六章、containers容器类部件QToolBox工具箱详解

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一、概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有如下: toolBox工具箱是一个容器部件,对应类为QToolBox,在其内有一列从上到下顺序排列的标签部件项(tabbed widget item),每个标签部件项都有一个索引位置,位置索引是...

老猿Python 1536

PyQt开发实战: 利用QToolBox开发的桌面工具箱

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一、引言 toolBox工具箱是一个容器部件,对应类为QToolBox,在其内有一列从上到下顺序排列的标签部件项(tabbed widget item),具体请见《PyQt(Python+Qt)学习随笔:工具箱(QToolBox)的用途及标签部件项(tabbed widget item)作用介绍...

老猿Python 2350

5G初始注册流程详解(2)-Registration Request

1:了解注册的本质,5G终端为什么要注册? 2:SUCI,SUPI,5G-GUTI的区别? 3:为什么会有COMPLETE REGISTRATION REQUEST呢?

weixin_53220301的博客 3794

PyQt(Python+Qt)学习随笔:工具箱(QToolBox)的用途及标签部件项(tabbed widget item)作用介绍

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 1、概述 toolBox工具箱是一个容器部件,对应类为QToolBox,在其内有一列从上到下顺序排列的标签部件项(tabbed widget item),每个标签部件项都有一个索引位置,位置索引是从上到下从0开始的顺序数字。每个标签部件项同时对应一个QWidget或其派生的部件,当对应标签部件项...

老猿Python 2878

Globus数据下载全攻略:从零配置到批量下载大文件(附常见问题解决)

本文详细介绍了Globus数据下载的全流程,从零配置到批量下载大文件的实用技巧,包括环境准备、高级传输策略、性能优化及常见问题解决方案。Globus作为科研数据的高效传输工具,通过并行流传输和自动校验技术,显著提升大规模数据传输的效率和可靠性。

u9v0w的博客 662

STM32CubeMX | HAL库实战:ADC多通道采集模式深度解析(轮询、DMA、TIM触发)

本文深度解析了基于STM32CubeMX与HAL库实现ADC多通道数据采集的三种核心模式:轮询、DMA以及TIM触发DMA。文章通过对比分析,详细阐述了各模式的配置要点、适用场景与潜在陷阱,旨在帮助开发者根据实时性、CPU占用及采样精度等需求,选择并实现高效稳定的多通道数据采集方案。

postgres8guard的博客 971

pyqt5做一个工具箱

pyqt5

qq_38312411的博客 1万+

【FPGA】安路FPGA下载器驱动安装教程

#来自学渣的问候 最近正在参加19年的FPGA创新设计大赛,然后我们选择了安路(全名:上海安路信息科技有限公司)的 FPGA 开发板。安路算是国产FPGA中还不错的一家,和紫光一样,除了自主生产的FPGA,也开始拥有了自己的编译环境。 好了。言归正传,写这篇博客的原因是,前几天在安装 安路 的编译环境和下载器驱动的时候,出了点问题,弄得心烦意乱。所以打算解决之后写篇博客,避开这个神奇的问题。 首先...

Ninquelote的博客 2万+

PyQt QToolBox组件

是PyQt6 中的一个容器组件,用于创建一个可折叠的工具箱或选项卡式界面。它允许用户通过点击标题栏来展开或折叠不同的页面,适合用于需要分组显示大量控件或信息的场景。页面管理: 可以包含多个页面(),每个页面可以包含其他控件。折叠与展开:用户可以通过点击标题栏展开或折叠页面。动态页面:可以动态添加、移除或插入页面。图标支持:每个页面的标题栏可以显示图标。:获取或设置当前显示的页面索引。:获取页面总数。:获取指定页面的标题。:获取指定页面的图标。:添加一个页面,并指定标题。:在指定位置插入一个页面。:移除指定位

青衫背剑远游客的博客 635

gtsam官方文档: The new IMU Factor学习笔记

gtsam官方文档:The new IMU Factor 本文为gtsam imu预积分文档学习笔记,为gtsam基于切向量实现的imu预积分的理论基础。 导航状态 定义导航状态为 Xbn={Rbn,Pbn,Vbn}X^n_b=\{R^n_b,P^n_b,V^n_b\}Xbn​={Rbn​,Pbn​,Vbn​} 上角标n:导航(navigation)坐标系 下角标b:载体(body)坐标系 下文均省略上下标 矢量场与微分方程 对于导航问题我们用如下微分方程描述 X˙(t)=F(t,X)\dot X(t)

南柯一梦的博客 1608

PCIe-Orders set Blocks之symbol对齐

有序集的使用场合很多,如在链路link阶段,进入polling后,便开始有序集的发送。一个 Ordered Set Block 包含一个同步头,后跟一个有序集。多通道链路的所有 Lane 必须同时传输相同的有序集,而且有序集的第一个符号定义了有序集的类型。但在PCIE中,8GT/s及以上的速率,采用的是128b/130b编码。128-bit是想要传输的payload,实际会传输130-bit,多出来的2-bit就是sync header。Block有两种,通过Sync header区分:10b:表示data

weixin_44700185的博客 813

pyqt项目22-QToolBox

提示:这里可以添加本文要记录的大概内容:提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

weixin_45536181的博客 449

【AI测试必学】DeepSeek API 快速入门:获取 API Key 与调用 API 步骤详解

DeepSeek API 使用与 OpenAI 兼容的格式,可以通过修改配置使用 OpenAI SDK。生成的 API Key 只会显示一次,请妥善保存。注册并登录账号,进入左侧导航栏的。创建 API Key。

blues_C的博客 1万+

PyQt5 工具箱

QToolBox QToolBox类提供了一列选项卡的小部件(选项卡内含项目)。 工具箱是一个小部件,它将选项卡一个一个的显示,当前项目显示在当前选项卡下方。每个选项卡在选项卡列中都有一个索引位置。一个选项卡的项目是一个QWidget。 每个项目都有一个itemText(),一个可选的itemIcon(),一个可选的itemToolTip()和一个widget()。项目的属性可以通过setI...

十三 1877

《从理念到落地:Claude Code 在真实项目中的深度实践指南》基于 Anthropic 团队内部使用经验的扩展与深度解读,一篇面向工程团队的全面实践手册

Claude Code 支持通过# 创建新的 API 端点根据以下输入创建完整的 API 端点:资源名称:$ARGUMENTS请创建以下文件:1. `src/routes/{resource}.routes.ts` - 路由定义2. `src/controllers/{resource}.controller.ts` - 控制器3. `src/services/{resource}.service.ts` - 服务层。

AI天才研究院 482

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Qt扫盲-QToolBox理论总结

QToolBox 是一个类似前端的抽屉容器,它有一组选项卡,每个选项卡会在其下方自带有一个QWidget 来会显示一些内容。每个选项卡在选项卡列表中都有一个索引位置。这个选项卡的位置也是有顺序的,这样我们就可以定位到每一个选项卡的位置了

洪源兄 3435

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

17-1-第四章 Python工具箱(一)

python 工具箱中包含多个工具。在用户角度来讲,Python 工具箱中的工具就像是常规地理工具一样,脚本工具中许多优点同样适用于python工具箱中的工具。从开发角度来讲,python工具箱是用python编写的,这个章节描述了创建工具的步骤以及如何定义参数。...

weixin_43416590的博客 2567

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Python GUI设计——PyQt5的学习实践记录day09(PyQt5常用控件【三】)

TabWidget在显示选项卡时,如果默认大小显示不下,会自动生成先前和先后的箭头,用户可以通过单击箭头,查看未显示的选项卡。【TabWidget:可以将窗口设计成多页,以便使窗口的功能划分为多个部分,而每个部分都可以包括多个子控件】TabWidget最常用的信号是currentChanged,该信号在切换选项卡时发射。【当删除某个选项卡时,选项卡会自动切换到前一个,因此也会弹出相应的信息提示】【QGroupBox类中最常用的是setTitle()方法,如下👇:】————————————晚饭时间到!

TataDou的博客 1378

(十)arcpy开发&&设置arcpy参数数据类型

在arcgis的arcpy二次开发中,往往我们需要设置工具的数据类型。如下图的Add Geometry Attributes工具中Input Features选项。在这里我们需要设置的数据类型为矢量属性数据。 又如下面的工具Points to line。在Input Features中数据类型可以是Feature class、Layer file 、All Fitters List ...

yGIS 5170

Python工具箱系列(二十)

数据库操作应是所有合格程序员的基本功,写的一手好SQL对于数据分析师而言更是安身立命之本。大部分软件开发人员使用的数据库都是MySql/MariaDB,毕竟LAMP(linux+apache+mysql+php)曾经风靡一时。

shaanxihualu的博客 196

Qt之工具盒(QToolBox)

ToolBox是容器组(Containers)中的一员。Containers包括:(1)Group Box:组框(2)Scroll Area:滚动区域(3)Tool Box:工具箱(4)Tab Widget:标签小部件(5)Stacked Widget:堆叠部件(6)Frame:帧(7)Widget:小部件(8)MDI Area:MDI区域(9)Dock Widget:停靠窗体部件(10)QAxWidget:封装Flash的ActiveX控件。

weixin_44875787的博客 3547
上一篇: 第二十六章、containers容器类部件QToolBox工具箱详解
下一篇: 第二十七章、containers容器类部件QTabWidget选项窗部件详解
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值