[這裡是圖片001]
Python標准庫更多的適合處理後台任務,唯一的圖形庫tkinter使用起來很不方便,所以後來出現了針對Python圖形界面開發的擴展庫,今天老猿要介紹的是主流Python圖形界面擴展庫之一的PyQt。
在介紹PyQt之前,必須先簡單介紹一下Qt。Qt是一個C++可視化開發平台,是一個跨平台的C++圖形用戶界面應用程序框架(C++ GUI),能夠為應用程序開發者提供建立圖形用戶界面所需的功能。Qt是完全面向對象的、易擴展,可應用於組件編程,並可以用於嵌入式開發。它是目前流行的Linux桌面環境KDE 的基礎,是Linux和嵌入式操作系統下的主流圖形界面開發環境,其最大優勢在於只需編寫一次代碼,就能編譯部署在任何操作系統和硬件上。因為擅長圖形界面開發,如今更擴展到移動及嵌入式設備開發。對於商業軟件公司來說極具價值,可以廣泛應用於物聯網特別是智能汽車、智能制造業等的研發。
PyQt是一個創建Python GUI應用程序的工具包,是Qt和Python結合的一個產物,可以說是為了將Qt的功能用於Python開發的一個Qt的Python包裝器。它是Python編程語言和Qt庫的成功融合。
PyQt的整個程序開發框架,老猿認為主要包括如下部分:
通過這些重要的工具和框架機制,開發人員可以設計對應的GUI圖形化界面、定義不同部件的操作及響應、捕獲部件或應用的消息以及實現界面顯示組件和數據存儲組件的聯動,從而構造完整的應用程序框架。
Qt Designer是一個可視化的界面設計工具,可以通過拖拽等方式來設計界面。下面就是Qt Designer的操作界面:
老猿將界面各部分使用紅色數字進行標記,按照數字順序各區域對應功能分別為:
這部分提供了Qt所有可視化控件,分為八大類,分別為布局控件(Layouts)、分隔控件(Spacers)、按鈕控件(Buttons)、表項視圖(item views)、表項組件(item widgets)、容器(Containers)、輸入組件(input widgets)、顯示組件(Display widgets),在新建窗口後,可以將各種功能的組件拖拽到窗口上實現可視化的界面設計。
本部分是各種操作菜單和對應的工具欄。其中:
File菜單用來新建、打開、打開最近、保存界面的UI文件。
Edit菜單可以編輯界面控件、控件屬性、信號/槽連接、控件Tab順序、標簽和其他控件的伙伴關系等
Form菜單用來編輯當前窗口的布局、大小,預覽窗口等。
View菜單就是看整體界面哪些區域展示出來,即本文中除UI設計工作區的區域哪些展現在界面上;
window菜單就是當前UI設計窗口的切換。
所有UI設計的工作區,工作區構建的UI作為設計成果保存。
這塊完成組件各個屬性的設置,屬性是按組件的類、父類的方式展現的,由於屬性太多單頁沒有展現完,上面截圖沒能體現這點,如果把這些屬性的父節點折疊起來,就可以很清晰的看到這個關系,下圖就是輸入控件的根節點折疊後展示的情況:
可以看到,除了控件自身的QLineEdit類外,還有父類QWidget、QObject,在這個截圖中,這三個是按父類在前、子類在後的順序展現的,據老猿觀察大部分情況都是這樣的,但某些特殊情況可能不是這樣的。如下圖:
上圖中QTreeView控件及其之上的節點都是按父子繼承關系展示的,但下面多了個Header。
通過這些展示信息,我們可以清楚知道哪些屬性是從哪個類帶來的。
信號和槽是Qt最有特色的內容,具體在後面介紹,在這裡可以編輯信號和槽函數的連接關系,但直接按F4進入信號和槽函數連接的界面更方便。
動作Action是Qt抽象的用戶界面操作,Qt中單獨引入的一個對象,對應QAction類。Action表示一個獨立的操作,是將界面上某個可以通過菜單、快捷鍵、toolBar按鈕執行的同一個操作映射到同一個Action對象,由該對象通過信號觸發實際的操作。
信號和槽是PyQt和Qt特有的信息傳輸機制,是PyQt和Qt設計程序的重要基礎,它可以讓互不干擾的對象建立一種聯系。
信號和槽用於對象間的通信,在一個圖形界面程序中,當一個組件中發生變化時,通常需要通知其他對象,在Qt中當特定事件發生時會發射一個信號來通知需要通知的對象,需要關注的對象就會調用信號連接的槽函數執行響應操作。信號本質上是一個公有函數(或方法)。
槽可以用來接收信號,但槽也是部件派生類的正常成員函數,槽本質上是某個類的方法(包括虛方法),用來調用以響應特定信號,非虛函數的槽函數也可以正常調用,與普通實例的唯一的區別是信號可以連接到它們。
PyQt的圖形界面應用中,事件處理類似於Windows系統的消息處理。一個帶圖形界面的應用程序啟動後,事件處理(如鼠標事件處理、鍵盤事件處理等)就是應用的主循環,事件處理負責接收事件、分發事件、接收應用處理事件的返回結果,在程序中捕獲應用關注的事件觸發相關事件處理是良好UI開發的必經之路。
PyQt中的事件分為應用層級的事件、部件級的事件,所有事件都可以捕獲和過濾,從而影響事件的處理結果。
在PyQt和Qt中,Model/View架構是圖形界面開發時用於管理數據和界面展現方式的關系。由該體系架構引入的功能分離使得開發人員能夠更靈活地定制展現數據項的呈現方式,並提供標准模型接口支持廣泛的數據源與預定義好的項視圖(item views)一起使用。
老猿理解Model/View就是Model提供數據訪問,View進行數據呈現,二者可以綁定實現聯動,但界面呈現的風格與數據本身無關。
老猿是個沒有藝術細胞的人,做的GUI界面說實在的很丑陋,但並不是說PyQt做不出炫酷的界面,恰恰相反,Qt或PyQt都能做出漂亮的界面。
下面是為了說明PyQt多種風格界面的一些老猿做的界面,僅用於說明PyQt能支持的界面風格類型:
listView用於文件目錄顯示
用QTableView展示Excel文件
用QTreeWidget顯示目錄文件信息
用QTableWidget操作表格
用QTabWidget選項窗顯示不同操作頁
用QToolBox構建的桌面工具箱
用QStackedWidget構建的堆疊窗口展示多張圖片
QMdiArea多文檔界面部件一次展示多張圖片
本文介紹了Python的圖形化界面應用開發工具PyQt的功能和開發框架,通過PyQt的這些重要的工具、功能和框架機制,開發人員可以設計對應的GUI圖形化界面、定義不同部件的操作及響應、捕獲部件或應用的消息以及實現界面顯示組件和數據存儲組件的聯動,從而構造完整的應用程序框架,最後提供了老猿實現的一些PyQt開發程序的界面來說明PyQt不同部件的界面風格。
通過以上內容的介紹,有助於對PyQt或Qt不了解的初學者提了解PyQt的基本開發框架、應用界面風格。
當然涉及PyQt,還有QML、PyQt5-sip等特色開發支持能力,這些老猿暫時沒有研究,就不多說了。
更多PyQt開發的內容介紹,請參考老猿PyQT專欄《https://blog.csdn.net/laoyuanpython/category_9702362.html PyQt入門知識》的介紹。
如果閱讀本文於您有所獲,敬請點贊、評論、收藏,謝謝大家的支持!
前兩個專欄都適合有一定Python基礎但無相關知識的小白讀者學習,第三個專欄請大家結合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python圖形圖像處理 》的學習使用。
對於缺乏Python基礎的同仁,可以通過老猿的免費專欄《https://blog.csdn.net/laoyuanpython/category_9831699.html 專欄:Python基礎教程目錄)從零開始學習Python。
如果有興趣也願意支持老猿的讀者,歡迎購買付費專欄。
如對文章內容存在疑問,可在博客評論區留言,或關注:老猿Python 微信公號發消息咨詢。