zoukankan      html  css  js  c++  java
  • 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!

  • 相关阅读:
    1161-飞弹
    1160-繁杂的道路
    JS实现刷新iframe的方法
    ifame 跨域高度自适应
    Asp.net弹出层并且有遮罩层
    Regex.Match 方法
    查询404文件
    JS中showModalDialog 详细使用
    对frameset、frame、iframe的js操作
    HTML & XML 转义字符
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/12570423.html
Copyright © 2011-2022 走看看