• 老猿Python博文目录
  • 专栏:使用PyQt开发图形界面Python应用
  • 老猿Python博客地址

一、概述

容器部件就是可以在部件内放置其他部件的部件,在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-1if 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!

  • 老猿Python博文目录
  • 专栏:使用PyQt开发图形界面Python应用
  • 老猿Python博客地址

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

  1. 第15.33节 PyQt(Python+Qt)入门学习:containers容器类部件QTabWidget选项窗部件简介

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有 ...

  2. 第15.12节PyQt(Python+Qt)入门学习:可视化设计界面组件布局详解

    一.引言 在Qt Designer中,在左边部件栏的提供了界面布局相关部件,如图: 可以看到共包含有四种布局部件,分别是垂直布局(Vertical Layout).水平布局(Horizontal La ...

  3. 第15.22节 PyQt(Python+Qt)入门学习:Model/View架构详解

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.简介 在PyQt和Qt中,Model/View架构是图形界面开发时用于管理数据和界面展现方式的关 ...

  4. 尚观python培训_尚观Python基础入门学习,资源教程下载

    课程名称 尚观Python基础入门学习,资源教程下载 课程介绍 Python开发是目前很多朋友选择学习的一门技术,在大家学习的同时,楼主在这里给大家分享了一个运维python视频教程,需要的朋友可以下 ...

  5. PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中当前列currentColumn和选中项selectedItems访问方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 当前列访问方法 树型部件QTreeWidget的currentColumn()方法返回当前项中得到焦 ...

  6. PyQt(Python+Qt)学习随笔:Qt Designer中部件的accessibleDescription和accessibleName辅助阅读属性

    accessibleDescription和accessibleName属性都是用于残疾人辅助阅读的,这两个属性都有国际化属性(关于国际化请参考<PyQt(Python+Qt)学习随笔:Qt D ...

  7. PyQt(Python+Qt)学习随笔:QScrollArea的widgetResizable属性

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 滚动区域的widgetResizable属性用于控制滚动区域的内容部署层是否应跟随滚动区域的大小变化 ...

  8. 【python教程入门学习】第一个Pygame程序

    Pygame 作为一个入门级的游戏开发库,其实并不难学,只要掌握 Python 编程的相关知识就能很轻松地掌握它. Pygame 语法简单.明了,秉持了 Python 语言一贯的风格.同时,它作为一个 ...

  9. python数据分析入门学习笔记

    python数据分析入门学习笔记儿 学习利用python进行数据分析的笔记儿&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我 ...

最新文章

  1. 基于YOLOv5的智慧工地安全帽检测(1)
  2. window下不用安装虚拟机,也可以玩转linux,玩转最新redis
  3. 使用SpringBoot Actuator监控应用
  4. mysql 最大并发连接数
  5. ASP.NET 2.2 Preview 1首次支持Java SignalR客户端
  6. python io多路复用_python实现IO多路复用 --- selector
  7. 创业融资十项注意要点
  8. 微信公众号内嵌H5网页授权步骤
  9. Java集成openCV实现图片背景切换
  10. PDF打开不能打印什么原因呢
  11. linux测速脚本,七兮网络-Linux一键测速脚本Superspeed.sh,包含更多国内国际测速节点的脚本...
  12. git进阶 | 01 - git基础操作进阶
  13. Android 蓝牙连接
  14. 金立创始人刘立荣:从南下淘金到身价15亿
  15. 范德堡大学排名计算机,【usnews世界大学排名2019】2019范德堡大学排名(USNews排名)...
  16. Rabbit health check failed
  17. 三个漂亮的网页登录页面源码及素材——可用于前端初学者练习HTMLCSS
  18. 如何拆分PDF文件?简单几步轻松拆分
  19. 修复win10的微软应用商店闪退
  20. SEO新手站长说说之网站更新频率多少才合适

热门文章

  1. 汉字字词转拼音接口(支持多音字)
  2. Bartender EAN-128算法VB脚本实现
  3. 重点项目工作规范及注意事项
  4. Springboot 关于jsp报 Path with WEB-INF or META-INF: [WEB-INF/jsp/index.jsp] 错误总结
  5. Python学习-01(其实是Linus基础)
  6. 【C语言】一些概念的基本解释
  7. WPF限制文本框只能输入数字
  8. 以Python+Bottle框架作为jQuery.Uploadify控件的后端 | apt-blog.net 无证程序员的PT桑apt-blog.net 无证程序员的PT桑...
  9. 弹性盒子模型中`display:flex`布局下`white-space:nowrap`失效问题
  10. 为啥你的height:100%不起作用?