基于PyQt的小型应用软件开发指南

原创
2013/07/30 10:54
阅读数 2.1K

基于PyQt的小型应用软件开发指南

1. 为什么选择python,gui框架为什么选择PyQt?

开发一款软件,选择何种开发语言,选择选定语言下的开发框架,选择何种类型的数据库,选择何种并行框架等等都是软件工程师必须考虑和深入研究的课题,至于我为什么选择python,因为在python语言学习上花费的时间最久,最为了解,如果有一种语言我足够了解并且在某些应用领域要优于python,我会抛弃python。至于gui框架为什么选择PyQt,我也不是很清楚,纯属偶然的机会看到pyqt的demo界面和里面的各个程序,我的第一印象是几行简单的代码就可完成漂亮的界面编写,It's amazing!慢慢的,随着对PyQt的学习,其中很多优秀的特性令我痴迷:

  • 1.丰富的库,不单单是gui库,其他网络库,多线程,多进程等等:

    • PyQt包含了大约440个类型、超过6000个的函数和方法:
      • QtCore 模块主要包含了一些非GUI的基础功能,包含事件循环与Qt的信号机制。此外,还提供了跨平台的Unicode、线程、内存映射文件、共享内存、正则表达式和用户设置。
      • QtGui 模块包含了大多数的GUI类型。包含按钮、文本框、列表等常见控件,还包含了基于MVC设计模式的列表、表格、树型控件。同时还提供了一个能够容纳成千上万个元素的画布控件,其中可以放置各种控件和图形。此外,还可以QtGui还支持界面动画与界面状态机编程。
      • QtNetwork 模块可以用于编写非阻塞式的UDP、TCP程序。还包含了DNS、HTTP与FTP的客户端。
      • QtOpenGL 模块允许Qt程序使用OpenGL渲染3D图形在,而且不必大量更改代码。
      • QtSql 模块支持多种SQL数据库。包括sqlite、ODBC、MySQL、PostgreSQL、Oracle。还提供了一个基于MVC模式的数据模型,与QtGui的的表格控件配合使用。
      • QtXml 包含一个XML解释器,同时支持SAX和DOM两种编程方式。
      • QtWebkit QtScript 两个子模块支持WebKit与EMCAScript脚本语言
      • Phonon 子模块支持高级的多媒体编程。包含音频播放器、视频播放器与声效处理。
      • uic 子模块能够将Qt的窗体文件转换为Python代码,能够即时读入窗体文件并且显示出来。它依赖于QtXml模块。
      • QScintilla 子模块包含一个基于Scintilla的文本编辑器控件,Eric IDE使用它作为代码编辑器。
      • QtMultimedia 提供了底层的多媒体支持,现在多数开发者改用Phonon模块。
      • QtSvg 支持SVG 1.2Tiny的静态标准,用于显示与保存SVG格式的图形。
  • 2.信号与槽机制:

    • Qt采用了signal和slot的概念来处理GUI程序中的用户事件。PyQt同样支持这种方法,还进而针对Python的特点增强了某些功能。任何Python类型都可以定义signal和slot,并与GUI控件的signal和slot相连接。PyQt支持old-style与new-style两种连接方式。不过,目前一般推荐使用new-style connection。 因为它还支持连接到Python函数,而且看起来也比较pythonic。
      • old-style connection:
    self.connect(self, SIGNAL("mySignal(int)"), self, SLOT("mySlot(int)"))
    + **new-style connection**:        
    self.mySignal.connect(self.mySlot)
  • 3.支持类css的qss进行样式控制,界面美化轻轻松松

  • 4.全新的界面开发方式qml(集html和css于一体的语言)

2. 软件开发环境说明

  • 开发语言: python2.7 + PyQt4 + sqlit3 + py2exe + Inno Setup Compiler

    • python2.7:

      • Python(KK 英语发音:/ˈpaɪθən/,是一种面向对象、直译式计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。Python语法简捷而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。常见的一种应用情形是,使用python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,速度要求非常高,就可以用C++重写。
    • PyQt4:

      • PyQt是一个创建GUI应用程序的工具包。它是Python编程语言和Qt库的成功融合。Qt库是目前最强大的库之一。PyQt是由Phil Thompson 开发。 PyQt实现了一个Python模块集。它有超过300类,将近6000个函数和方法。它是一个多平台的工具包,可以运行在所有主要操作系统上,包括UNIX,Windows和Mac。 PyQt采用双许可证,开发人员可以选择GPL和商业许可。在此之前,GPL的版本只能用在Unix上,从PyQt的版本4开始,GPL许可证可用于所有支持的平台。因为可用的类有很多,他们被分成几个模块。
      • QtCore模块包含核心的非GUI功能。该模块用于时间、文件和目录、各种数据类型、流、网址、MIME类型、线程或进程。
      • QtGui模块包含图形组件和相关的类,例如按钮、窗体、状态栏、工具栏、滚动条、位图、颜色、字体等。
      • QtNetwork模块包含了网络编程的类,这些类允许编写TCP/IP和UDP的客户端和服务器,他们使网络编程更简单,更轻便。
      • QtXml包含使用XML文件的类,这个模块提供了SAX和DOM API的实现。
      • QtSvg模块提供显示的SVG文件的类。可缩放矢量图形(SVG)是一种用于描述二维图形和图形应用程序的XML语言。
      • QtOpenGL模块使用OpenGL库渲染3D和2D图形,该模块能够无缝集成Qt的GUI库和OpenGL库。QtSql模块提供用于数据库的类。
  • sqplit3:

    • SQLite是一个包含在C库中的轻量级数据库。它并不需要独立的维护进程,并且允许使用非标准变体(nonstandard variant)的SQL查询语句来访问数据库。一些应用可是使用SQLite保存内部数据。它也可以在构建应用原型的时候使用,以便于以后转移到更大型的数据库,比如PostgreSQL或者Oracle。
  • py2exe:

    • py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序
  • Inno Setup Compiler:

    • Inno Setup 是一款免费的安装制作工具。简洁而强大,支持 pascal 脚本,既有适合新手的脚本向导,也有适合高手的的脚本编辑器。是一个不可多得的安装制作软件!英文版可在官方软件中下载,但不支持中文;汉化版可在 inno setup chinese中下载

3.软件架构设计说明

  • UI层:

    • 风格
      • 整体风格采用Metro风格,利用qss对页面上的所有控件进行样式控制;
      • 如果利用webkit渲染html,我选择Bootstrap Metro UI CSS对html元素进行样式控制,使得程序的整体具有Metro风格。
  • 界面框架

    • 页面结构设计,采用基于QMainWindow的主体窗口;中心窗口控制页面间的切换逻辑和淡入淡出效果:中心窗口的核心控件为堆窗口控件QStackedWidget,集成各个功能单元模块,每个独立的页面独立开发,互不影响;

    • 页面切换和导航命名规则说明:每个页面采用首字母大写的单词代表相应的功能模块:

    • 通过配置文件config.py对所有的窗口基本样式进行控制

  • 功能模块子页面设计概述

    • 功能单元集合库childpages库:childpages库为各个功能单元的集合,每个function+page.py文件代表一个独立的单元,所有独立的单元继承自basepage.py中的BasePage类;
    • basepage.py中BasePage类的作用:实现所有功能单元模块的共同功能;
    • function+page.py中 Function+Page类的作用: 实现每个功能单元模块;
  • 功能单元具体设计--Function+Page类:

    • 1.基于QtGui.QWidget进行gui页面设计

        1. 原生方式进行图形界面设计,需要对Qt的各个控件用法加以理解;
        1. 风格控制:利用stylesheet对各个控件进行样式,即是利用Qt提供的qss对外观进行控制;qss的主要功能与最目的都是能使界面的表现与界面的元素分离,即质与形的分离,就如同一个人可以在不同的时候穿上不同的衣服一样,css机制的引入,使得设计一种皮肤与界面控件分离的软件成为可能,应用程序也能像web界面那样随意地改变外观
    • 2.基于QtWebKit.QWebView进行html页面设计

    • 3.基于QML和QtDeclarative.QDeclarativeView进行Qt Quick页面设计

  • 业务逻辑层

    • 涵盖与业务逻辑相关的模块应用层(app层),数据库层(db层),通信层(tcp/ip层),算法层(algrithom层)等,具体定义依据项目需求而定,例如我的项目:
      • 1.app层:主要负责数据库层,通信层,算法层,UI层之间的数据交互

      • 2.db层: 主要负责相关数据的存储:

        • 关系型数据库:不存在大数据的存储问题,选择python内置的split3是个不错的选择,数据以文件的形式存储在本地;
      • 非关系型数据库: 选择mongodb,利用mongokit库或者pymongo库进行数据的操作和定义

      • 3.tcp/ip层:主要负责通信协议的定义、客户端与服务端的实现等:

        • 通信协议定义使用dpkt库:
        • 服务端框架使用SocketServer库:
      • 4.algrithom层: 主要负责对采集的数据进行处理并输出结果到界面上显示:

展开阅读全文
打赏
3
20 收藏
分享
加载中
博主,此项目开源吗?想看看
2016/12/01 17:17
回复
举报
更多评论
打赏
1 评论
20 收藏
3
分享
返回顶部
顶部