Python精確指南——第二章 界面開發
2 Python GUI
借助Python語言的優勢,使用Python的界面庫開發界面程序,開發周期更短。但因為Python的界面開發庫底層實現一般不是Python,只是為Python封裝的接口,所以在開發自由度上還是有一些限制,適用于開發輔助工具或者不以用戶界面為競爭點的項目中。
2.1?? 界面庫的選擇
比較常用的是Tkinter, PYQT, wxPython三個界面庫。都具有跨平臺特性。
2.1.1??Tkinter(tkinter)
Tkinter(tkinter)是Python自帶的圖形界面庫,對于輔助開發測試的界面化小工具,可以選擇使用。
2.1.2????PyQt
PyQt是Python對于C++界面庫Qt的成功封裝,具有Qt開發經驗的同事可以選擇使用。
? 特點
界面活潑,跨平臺特性比wxPython要好,兼容不同的平臺需要適配的代碼更少。安裝包內置設計界面外觀資源的Designer工具,并包含PyQt Examples and Demos和Documentation輔助開發。
? 版本
Qt公司已經不再維護Qt 4.x的版本,所以,作為新開發的項目,也推薦選擇PyQt 5.x,最新的版本是5.9.2。-:
https://www.riverbankcomputing.com/software/pyqt/download5
最方便的安裝,不要下載源碼,直接下載bin安裝包,就什么都齊了。不然還要安裝一堆東西,非常的麻煩。
需要注意一點是,Qt 5.x的版本是基于Python 3.x的版本進行封裝。
如果商用PyQT,需要購買授權。
2.1.3? ? ?wxPython
wxPython是C++界面庫wxWidgets的Python封裝,開發接口和機制與微軟的C++界面庫MFC十分相似,具有MFC開發經驗的同事可以選擇使用。
? 特點
Python 2.x和Python 3.x在PyPI都有維護版本。相比PyQt,wxPython以LGPL協議發布,開源使用,使用時只要不修改源碼,發布產品時也可閉源發布。
? 版本
PyPI維護有最新的4.0版本,針對Python主流的各個維護版本:https://pypi.python.org/pypi/wxPython/4.0.0b2
SourceForge提供有最新版和歷史版本,進入各個分支還有開發文檔和樣例代碼可以下載。
2.2?? wxPython界面開發
此處以wxPython為例,簡單介紹wxPython界面開發的基本方法。
wxPython有一版教程wxPython in action是比較經典的入門學習資料可以參考。
原版網址:
https://www.manning.com/books/wxpython-in-action
中文版《活學活用wxPython》:
https://wiki.woodpecker.org.cn/moin/WxPythonInAction
因為界面開發的特點是在開發過程中需要反復查看調整界面的實現效果,純手動開發效率太低。wxPython當前比較好用的界面設計工具有BOA-constructor(簡稱BOA),wxFromBuilder,下面以BOA為例進行介紹。
BOA-:https://sourceforge.net/projects/boa-constructor/
2.2.1? ? BOA工具簡介
安裝完成后,雙擊Boa.exe打開wxPython界面開發環境。如下圖:
Boa-constructor如上圖分為上,左下和右下三個窗口。上面是幫助文檔按鈕欄及可視化控件選擇工具欄窗口(以下簡稱工具窗口),三個幫助文檔按鈕從左至右依次是boa-constructor,wxPython及Python的三個幫助文檔,相關控件我們后續進行介紹;左下是控件屬性窗口(以下簡稱屬性窗口),包括控件的基本屬性,擴展屬性,事件和控件層次結構視圖;右下是Python源文件的IDE編輯環境窗口(以下簡稱編輯窗口),支持代碼的運行及調試,可視化窗口的預覽,并能夠查看應用程序的模塊結構,源代碼文件的查看及修改,控件及相關事件的結構的查看及代碼快速定位,數據及控件布局器sizer的結構視圖。
2.1.1? ? ? 應用程序框架生成
在工具欄的New標簽下,找到生成wxPython應用程序的按鈕wx.App,點擊后在編輯窗口生成wxPython的App文件和Frame文件:
將這兩個文件根據需要更改名稱后保存到相同的工程目錄下。
回到BOA,點擊編輯窗口Frame Designer按鈕(以下簡稱預覽按鈕),可以預覽初始Frame的外觀,代表界面生成成功:
在Inspector面板,可以調整Frame的各項屬性:
點擊Editor工具欄上的運行按鈕:
即可運行出GUI的界面框架:
2.1.1????控件和響應事件的添加
選擇Frame文件,點擊預覽按鈕。在工具窗口的Containers/Layout標簽下,點擊wx.Panel控件。
在Frame的預覽窗口上左鍵點擊,即把panel控件放置在Frame面板上,關閉再打開預覽,panel填充整個Frame面板:
類似地,在Panel上放置一個按鈕。
在工具窗口的Buttons標簽下,點擊wx.Button控件
在Frame的預覽窗口上左鍵點擊,即把Button控件放置在Frame上的Panel面板上:
wxPython通過傳遞窗口事件消息的機制調用對應的函數處理UI界面交互事件,boa-constructor提供了相應的界面操作方法自動添加各種控件的消息處理函數。
在預覽panel上選定該button,在屬性窗口的Evts標簽下列出了button控件的一些事件。
對應于button控件,點擊button控件的事件是,雙擊wx.EVT_BUTTON,在代碼相應位置就自動生成了相應點擊該button的消息處理函數。
可以手動添加自己的代碼來控制按鈕事件的事件響應。
在Evts標簽下其他的一些事件是繼承自窗口類(window)的一些事件(wx.Butoon繼承自wx.Window類)
其他控件的事件相應函數的添加方法類似于此,具體控件具體事件傳遞的消息可以通過wxPython的示例代碼進行學習。
2.1.1???界面布局器Sizer
如果考慮到手動調整界面上各個控件的絕對坐標位置比較繁瑣,或者應用程序主窗口有改變大小的需求,那么使用Sizer是一個好的選擇。Sizer能夠根據它所包含的子控件的個數及父窗口的大小自動計算并設置控件坐標,并在主程序窗口改變大小時做出適應界面大小的布局設置。
具體使用方法可參考《活學活用wxPython》使用Sizer放置窗口部件章節。BOA同樣在工具欄上提供了可視化的工具對應不同類型Sizer的功能。
2.2?? 補充
使用界面設計工具具有開發快速的優點,但對于一些擴展控件或者自定義控件,就不能很方便的集成進來。
BOA對于設計工具自動生成的代碼,不能進行修改,否則不能再次識別預覽,對于這一點,可以繼承生成的類對象,在子類中進行個性化的修改,解耦生成代碼和自定義代碼,方便后來的維護工作。
對于另外一個界面設計工具wxFromBuilder,它的設計界面通過一個project保存下來,識別預覽不依賴于python代碼。只要project存在,就可以再次生成python代碼,避免了上面BOA的問題,有興趣的同事可以嘗試使用。
附件: Python精確指南-第二章界面開發.pdf 653.63KB 下載次數:23次
python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。