基於PyQt的小型應用軟件開發指南

基於PyQt的小型應用軟件開發指南

1. 爲何選擇python,gui框架爲何選擇PyQt?

開發一款軟件,選擇何種開發語言,選擇選定語言下的開發框架,選擇何種類型的數據庫,選擇何種並行框架等等都是軟件工程師必須考慮和深刻研究的課題,至於我爲何選擇python,由於在python語言學習上花費的時間最久,最爲了解,若是有一種語言我足夠了解而且在某些應用領域要優於python,我會拋棄python。至於gui框架爲何選擇PyQt,我也不是很清楚,純屬偶然的機會看到pyqt的demo界面和裏面的各個程序,個人第一印象是幾行簡單的代碼就可完成漂亮的界面編寫,It's amazing!慢慢的,隨着對PyQt的學習,其中不少優秀的特性令我癡迷:php

  • 1.豐富的庫,不僅僅是gui庫,其餘網絡庫,多線程,多進程等等:css

    • QtCore模塊主要包含了一些非GUI的基礎功能,包含事件循環與Qt的信號機制。此外,還提供了跨平臺的Unicode、線程、內存映射文件、共享內存、正則表達式和用戶設置。html

    • QtGui模塊包含了大多數的GUI類型。包含按鈕、文本框、列表等常見控件,還包含了基於MVC設計模式的列表、表格、樹型控件。同時還提供了一個可以容納成千上萬個元素的畫布控件,其中能夠放置各類控件和圖形。此外,還能夠QtGui還支持界面動畫與界面狀態機編程。python

    • QtNetwork模塊能夠用於編寫非阻塞式的UDP、TCP程序。還包含了DNS、HTTP與FTP的客戶端。web

    • QtOpenGL模塊容許Qt程序使用OpenGL渲染3D圖形在,並且沒必要大量更改代碼。正則表達式

    • QtSql模塊支持多種SQL數據庫。包括sqlite、ODBC、MySQL、PostgreSQL、Oracle。還提供了一個基於MVC模式的數據模型,與QtGui的的表格控件配合使用。算法

    • QtXml包含一個XML解釋器,同時支持SAX和DOM兩種編程方式。sql

    • QtWebkit與 QtScript兩個子模塊支持WebKit與EMCAScript腳本語言mongodb

    • Phonon子模塊支持高級的多媒體編程。包含音頻播放器、視頻播放器與聲效處理。數據庫

    • uic子模塊可以將Qt的窗體文件轉換爲Python代碼,可以即時讀入窗體文件而且顯示出來。它依賴於QtXml模塊。

    • QScintilla子模塊包含一個基於Scintilla的文本編輯器控件,Eric IDE使用它做爲代碼編輯器。

    • QtMultimedia提供了底層的多媒體支持,如今多數開發者改用Phonon模塊。

    • QtSvg支持SVG 1.2Tiny的靜態標準,用於顯示與保存SVG格式的圖形。

    • PyQt包含了大約440個類型、超過6000個的函數和方法:

    • 2.信號與槽機制:

      • old-style connection:

        1 self.connect(self, SIGNAL("mySignal(int)"), self, SLOT("mySlot(int)"))
      • new-style connection:

        1 self.mySignal.connect(self.mySlot)
      • Qt採用了signal和slot的概念來處理GUI程序中的用戶事件。PyQt一樣支持這種方法,還進而針對Python的特色加強了某些功能。任何Python類型均可以定義signal和slot,並與GUI控件的signal和slot相鏈接。PyQt支持old-style與new-style兩種鏈接方式。不過,目前通常推薦使用new-style connection。 
        由於它還支持鏈接到Python函數,並且看起來也比較pythonic。

    • 3.支持類css的qss進行樣式控制,界面美化輕輕鬆鬆

    • 4.全新的界面開發方式qml(集html和css於一體的語言)

    2. 軟件開發環境說明

    • 開發語言: python2.7 + PyQt4 + sqlit3 + py2exe + Inno Setup Compiler

      • 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模塊提供用於數據庫的類。

      • Python(KK 英語發音:/ˈpaɪθən/,是一種面向對象、直譯式計算機程序設計語言,由Guido van Rossum於1989年末發明,第一個公開發行版發行於1991年。Python語法簡捷而清晰,具備豐富和強大的類庫。它常被暱稱爲膠水語言,它可以很輕鬆的把用其餘語言製做的各類模塊(尤爲是C/C++)輕鬆地聯結在一塊兒。常見的一種應用情形是,使用python快速生成程序的原型(有時甚至是程序的最終界面),而後對其中有特別要求的部分,用更合適的語言改寫,好比3D遊戲中的圖形渲染模塊,速度要求很是高,就能夠用C++重寫。

      • python2.7:

      • PyQt4:

      • 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類:

        • 若是使用這種方式進行UI編寫,html模板的使用,選擇好的模板將相當重要;python中關於html的模板選擇較多,模板的選擇使用能夠參見以下:

        • Python 模板引擎性能對比1

        • Python 模板引擎性能對比2

        • 本項目中使用的Cheeth模板,關於Cheeth的使用參見Cheeth用戶指南



        • 1.基於QtGui.QWidget進行gui頁面設計

        • 2.基於QtWebKit.QWebView進行html頁面設計

        • 3.基於QML和QtDeclarative.QDeclarativeView進行Qt Quick頁面設計

          1. 原生方式進行圖形界面設計,須要對Qt的各個控件用法加以理解;

          1. 風格控制:利用stylesheet對各個控件進行樣式,便是利用Qt提供的qss對外觀進行控制;qss的主要功能與最目的都是能使界面的表現與界面的元素分離,即質與形的分離,就如同一我的能夠在不一樣的時候穿上不一樣的衣服同樣,css機制的引入,使得設計一種皮膚與界面控件分離的軟件成爲可能,應用程序也能像web界面那樣隨意地改變外觀

        • 業務邏輯層

          • 1.app層:主要負責數據庫層,通訊層,算法層,UI層之間的數據交互

          • 2.db層: 主要負責相關數據的存儲:

          • 非關係型數據庫: 選擇mongodb,利用mongokit庫或者pymongo庫進行數據的操做和定義

          • 3.tcp/ip層:主要負責通訊協議的定義、客戶端與服務端的實現等:

          • 4.algrithom層: 主要負責對採集的數據進行處理並輸出結果到界面上顯示:

          • 關係型數據庫:不存在大數據的存儲問題,選擇python內置的split3是個不錯的選擇,數據以文件的形式存儲在本地;

          • 通訊協議定義使用dpkt庫:

          • 服務端框架使用SocketServer庫:

          • 涵蓋與業務邏輯相關的模塊應用層(app層),數據庫層(db層),通訊層(tcp/ip層),算法層(algrithom層)等,具體定義依據項目需求而定,例如個人項目:

        相關文章
        相關標籤/搜索