PyQt开发实战: 利用QToolBox开发的桌面工具箱
一、引言
toolBox工具箱是一个容器部件,对应类为QToolBox,在其内有一列从上到下顺序排列的标签部件项(tabbed widget item),具体请见《PyQt(Python+Qt)学习随笔:工具箱(QToolBox)的用途及标签部件项(tabbed widget item)作用介绍》和《PyQt(Python+Qt)学习随笔:工具箱(QToolBox)编程使用的步骤及示例代码》的介绍。
本文将介绍老猿使用QToolBox实现的一个测试用Demo,实现一个桌面工具箱,在桌面工具箱中提供了通讯录、日历、时钟、记事本、图片显示五个工具。
二、UI设计
下图为该工具箱的UI设计:

包含了上面所介绍的五个标签,在《PyQt(Python+Qt)学习随笔:工具箱(QToolBox)编程使用的步骤及示例代码》中介绍说在UI界面就设计标签部件项,“其实执行后更麻烦,唯一的好处是能预览界面的情况,且标签的文本、图标和tooltip直接获取原来标签的即可无需在代码中指定”,但本Demo还是基于在UI中设计好标签部件项便于演示,但后续代码实现稍微复杂。
另外还有一个通讯录展示的窗口:

三、使用PyUIC生成UI对应代码文件
生成ui_toolBoxTest.py为应用主界面、ui_showPersons.py为通讯录展示窗口。
四、派生通讯录管理类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)
之所以派生该类是为了实例创建时可以直接添加成员。
五、定义数字时钟类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界面上显示时间
......
六、从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) #恢复当前选中项
七、运行界面截图


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

老猿Python,跟老猿学Python!
PyQt开发实战: 利用QToolBox开发的桌面工具箱的更多相关文章
- PyQt开发样例: 利用QToolBox开发的桌面工具箱Demo
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 toolBox工具箱是一个容器部件,对应类为QToolBox,在其内有一列从上到下顺序排列 ...
- Hadoop应用开发实战(flume应用开发、搜索引擎算法、Pipes、集群、PageRank算法)
Hadoop是2013年最热门的技术之一,通过北风网robby老师<深入浅出Hadoop实战开发>.<Hadoop应用开发实战>两套课程的学习,普通Java开发人员可以在最快的 ...
- JFinal极速开发实战-业务功能开发-通用表单验证器
提交表单数据时,需要经过前端的验证才能提交到后台,而后台的验证器再做一道数据的校验,成功之后才能进入action进行业务数据的处理. 在表单数据的验证中,数据类型的验证还是比较固定的.首先是对录入数据 ...
- Modbus软件开发实战指南 之 开发自己的Modbus Poll工具 - 1
在开发Modbus程序的过程中,也可以发现经常需要使用诸如Modbus Poll和Modbus Slave等辅助调试工具, 用于验证MODBUS通讯消息是否正确.但是,Modbus Poll和Modb ...
- Modbus软件开发实战指南 之 开发自己的Modbus Poll工具 - 2
接上一篇文章的内容. 看了前面需求提到的复杂的命令行解析功能,很多人立马开始发怵,其实大可不必. 我们都知道,Linux下的程序往往都提供了复杂的命令行参数处理机制,因为这是与 其他程序或用户进行交互 ...
- 《Python高效开发实战》实战演练——开发Django站点1
6.2 实战演练:开发Django站点 用Django开发网站需要遵循Django的一套开发流程.本节通过建立一个消息录入页面演示Django的开发流程及相关技术. 6.12.1 建立项目 在进行D ...
- Modbus软件开发实战指南 之 开发自己的Modbus Poll工具 - 3
Modbus-RTU 一.数据分析 两个设备(单片机)通讯,用的是Modbus协议. 在单片机中拿出一部分内存(RAM)进行两个设备通讯,例如: 说明: OX[20] 代表是 ...
- 《Python高效开发实战》实战演练——内置Web服务器4
<Python高效开发实战>实战演练——开发Django站点1 <Python高效开发实战>实战演练——建立应用2 <Python高效开发实战>实战演练——基本视图 ...
- 《微信小程序商城开发实战》笔者的新书,欢迎各位粉丝上京东购买
作者图书京东链接,请点击------>>> **微信小程序商城开发实战** 附京东真实评价截图: 编辑推荐 在当今移动互联网大潮中,微信应用凭借其庞大的用户基数和极强的用户黏性 ...
随机推荐
- 6、Python语法之垃圾回收机制
一 .引入 解释器在执行到定义变量的语法时,会申请内存空间来存放变量的值,而内存的容量是有限的,这就涉及到变量值所占用内存空间的回收问题,当一个变量值没有用了(简称垃圾)就应该将其占用的内存给回收掉, ...
- 什么是4G模块 4G模块的工作原理及特点
什么是4G模块 4G模块,也被叫做4G通信模块或4G DTU模块,他是物联网行业具有4G通信功能的一种产品,通过4G模块,我们可以实现工业设备数据通过无线4G网络传输到远端控制中心,并从控制中心通过4 ...
- kudu1.10基于cdh6.3.1搭建
1.下载kudu依赖: yum -y install cyrus-sasl-plain ntp 2.下载kudu rpm包: wget https://archive.cloudera.com/c ...
- tcp输入数据 慢速路径处理 && oob数据 接收 && 数据接收 tcp_data_queue
大致的处理过程 TCP的接收流程:在tcp_v4_do_rcv中的相关处理(网卡收到报文触发)中,会首先通过tcp_check_urg设置tcp_sock的urg_data为TCP_URG_NOTYE ...
- binary hacks读数笔记(ld 链接讲解 一)
首先我们先看两段代码: a.c extern int shared; int main(){ int a=100; swap(&a,&shared); } b.c int shared ...
- 2020年最新ZooKeeper面试题(附答案)
2020年最新ZooKeeper面试题 1. ZooKeeper 是什么? ZooKeeper 是一个开源的分布式协调服务.它是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于 Zooke ...
- JavaScript复习大纲
1. HTML.CSS和JavaScript各自在网页设计中的作用. 1.HTML生成结构. 2.CSS样式美化. 3.JavaScript的作用: (1) 操作HTML及CSS,让网页具有动态行为. ...
- 在FL Studio中如何使用Patcher插件
Patcher作为FL Studio20中自由度极高的一款插件,深受当今制作人的喜爱.其主要功能用于整合混音插件的输入与输出以及自定义控制器等功能.下面分几部分来介绍这个插件. Patcher的Map ...
- 「CSP-S 2020」动物园
description luogu loj(暂无数据) solution 这道题作为T2,对选手们考试开始后先通看一遍所有题目的好习惯,以及判断究竟谁才是真正的签到题的重要能力进行了较好的锻炼, 特别 ...
- Java基础教程——方法引用
方法引用 Lambda表达式的代码,是否可以再简洁?--方法引用 对象/类名::方法名 参数都不用写明. import java.util.function.Consumer; public clas ...