上篇介紹了Python的環境搭建,主要是開發環境的介紹,本篇主要介紹Python的GUI開發工具Boa-constructor的使用和我們的程序開發完畢后的打包問題,本篇還會介紹在Python中我們如何使用第三方擴展庫。
一、如何選擇GUI開發工具
Python的gui開發工具有很多,有Thiner,WxPython,PyQt,pyGtk,Jython,MFC,IronPython,PythonCard,Dabo,AnyGui,Wpy等,簡直有太多了,選幾種用的比較多的簡單介紹一下,目前我用的是WxPyton。
Tkinter
Tkinter 似乎是與tcl語言同時發展起來的一種界面庫。tkinter是python的配備的標準gui庫,也是opensource的產物。Tkinter可用 于windows/linux/unix/macintosh操作系統,而且顯示風格是本地化的。Tkinter用起來非常簡單,python自帶的 IDLE就是采用它寫的。除此外,tkinter的擴展集pmw和Tix功能上都要相對它強大,但tkinter卻是最基本的。我認為,在用python 做gui開發,tkinter是最基本的知識,所以這個環節是必須要學習的。你或許在以后的開發中并不常用tkinter,但是一些小型的應用上面,他還 是很有用的,而且開發速度也很快。
WxPython
WxWidgets應該算是近幾年了比較流行的GUI跨平臺開發技術了。 wxWidgets有不同的版本應用,有c++的,也有basic的,現在在python上面也有較好的移植。wxpython的功能上面要強于 tkinter,她提供了超過200個類,面向對象的編程風格,設計的框架類似于MFC。對于大型GUI應用上面,wxPython還是具有很強的優勢 的。boa constructor可以幫助我們快速可視地構建wxwidgets界面。
Jython
嘗試過用python訪問java類庫嗎,那么就用jython吧。jython其實可以認為是另外一個python開發環境,基于java的,但是大多數 的CPython調用jython下還是可以的。你可以在jython環境下像使用java一樣來通過python的語法來調用java語言,真的很酷。
MFC
Windows Pywin32允許你像VC一樣的形式來使用PYTHON開發win32應用。代碼風格可以類似win32 sdk,也可以類似MFC,由你選擇。如果你仍不放棄vc一樣的代碼過程在python下,那么這就是一個不錯的選擇。
WPY
MFC風格的Gui開發庫,代碼風格也類似于MFC,僅管如此,你依舊可以使用這個庫來開發GUI應用,而不用擔心平臺移植的問題。
IronPython
如果你要想開發.net下面的應用的話,那么IronPython就是你的選擇,與jython有點類似,他同樣支持標準的python模塊,但同樣增加了 對.net庫的支持。你也可以理解為他是另一個python開發環境。你可以非常方便地使用python語法進行.net應用的開發,這一點聽起來真的挺 有意思。
上面的內容是Google找的,總之,介紹了這么多,我個人意見是,如果你是java用戶,你可以選擇用jython;如果你是.net用戶,那么就用ironPython吧。如果你對Visual C++很熟悉,那么你可以使用MFC,WPY或是wxPython,當然我更建議wxPython了。當然,我認為對于tkinter是每一個原來搞C的 人都應該了解和學習的GUI庫,因為她很輕便,小型應用就可以使用她來搞定,而對于較大型應用可以采用pyGtk,pyQt,WxPython或 PythonCard來搞定,這樣的話,既可以注重知識的銜接性,也可以快速進行開發了。
二、Python擴展庫
如果說強大的標準庫奠定了python發展的基石,豐富的第三方庫則是python不斷發展的保證,隨著python的發展一些穩定的第三庫被加入到了標準庫里面,可以在http://pypi.python.org/pypi?%3Aaction=index找到非常多的Python擴展庫,其中下面講的wxPython就是其中之一。我猜你喜歡Python的其中一個理由一定是它的非常多的拓展庫,下面列出了常用的Python第三方庫。
Django 開源web開發框架,它鼓勵快速開發,并遵循MVC設計,我以前用過很多次,比較好用,開發周期短。
ActiveGrid 企業級的Web2.0解決方案。
Karrigell 簡單的Web框架,自身包含了Web服務,py腳本引擎和純python的數據庫PyDBLite 。
webpy 一個小巧靈活的Web框架,雖然簡單但是功能強大 。
CherryPy 基于Python的Web應用程序開發框架 。
Pylons 基于Python的一個極其高效和可靠的Web開發框架 。
Zope 開源的Web應用服務器。
TurboGears 基于Python的MVC風格的Web應用程序框架。
Twisted 流行的網絡編程庫,大型Web框架。
Quixote Web開發框架。
Matplotlib 用Python實現的類matlab的第三方庫,用以繪制一些高質量的數學二維圖形 。
SciPy 基于Python的matlab實現,旨在實現matlab的所有功能 。
NumPy 基于Python的科學計算第三方庫,提供了矩陣,線性代數,傅立葉變換等等的解決方案 。
PyGtk 基于Python的GUI程序開發GTK+庫。
PyQt 用于Python的QT開發庫。
WxPython Python下的GUI編程框架,與MFC的架構相似。
Tkinter Python下標準的界面編程包。
BeautifulSoup 基于Python的HTML/XML解析器,簡單易用。
PIL 基于Python的圖像處理庫,功能強大,對圖形文件的格式支持廣泛。
MySQLdb 用于連接MySQL數據庫。
cElementTree高性能XML解析庫,Py2.5應該已經包含了該模塊,因此不算一個第三方庫了。
PyGame 基于Python的多媒體開發和游戲軟件開發模塊。
Py2exe 將python腳本轉換為windows上可以獨立運行的可執行程序。
pefile Windows PE文件解析器
三、boa-constructor的使用
我是一個.Net開發人員,我之所以不選擇IronPython的原因是不想再讓客戶端去安裝.net framework這么龐大的庫,所以我選擇了wxPython。wxPython的介紹上面有,我個人覺得wxPython還是比較容易學習的。因為有API可以供我們查閱,它和MFC有很多相同或者相似的地方,我個人還是比較喜歡,或者可以我沒有去嘗試其他的庫吧,因為我發現我已經喜歡上它了。
和wxPython庫搭配的開發IDE 也有很多,spe, boa-constructor,eclipse+pydev. 個人建議選擇boa-constructor 和 Eclipse+Pydev 搭配。其中boa-constructor用來開發界面,Eclipse+Pydev 用來編寫代碼。
boa-constructor個人感覺還是非常不錯的,剛開始可能會不懂,比較吃力一點,但是等你學會使用了以后相信你會喜歡上它的。下載地址:點擊此處下載。 安裝boa-constructor之前請確定你的機器上已經安裝了wxPython 和Python。目前需要wxPython 2.4.0.7 or higher and Python 2.1 or higher.
boa-constructor 安裝完畢后桌面或者開始菜單并沒有它的啟動快捷方式或者是目錄。你需要在你的Python安裝目錄下找到Python26\Lib\site-packages\boa-constructor 這個路徑下Boa.py文件。Boa.py為boa-constructor啟動文件。
1.雙擊Boa.py文件加載完畢后會出現如下界面。
- 其中1中的最上方一個窗口為boa-constructor的工具條,里面有基本的一些控件等。見下圖:
其中Python,wxPython, boa-constructor 的幫助文檔你也會在這個工具條中找到,這幾個文檔能為你后面的開發工作起到很大的作用。
- 下面的為檢視器窗口,它的主要作用相當于VS中的屬性窗口,包括一些控件的屬性,事件等。
- 主工作區域窗口就不進行介紹了,都是中文顯示。如下圖:
下面簡單介紹一下如何新建工程。
- 點擊最上方工具條視圖中的第五個圖標。
- 點擊之后,主編輯器窗口會出來2個未保存的新建文件(*App1*,*Frame1*),其中App1為程序的啟動文件,里面包含應用程序初始化的一些信息以及Main函數,Frame1為生成的一個新頁面,接下面我們需要做的就是繪制界面了。
- 切換到Frame1選項卡,然后按快捷鍵F12或者點擊框架設計器按鈕(),此時會彈出Frame1的設計界面,如下圖:
- 從工具條拖拉我們需要的控件到設計器區域,我拖拽了一個Button和一個Label,另外我修改了程序的標題。如下圖:
- WxPython也是采用的事件驅動的模型,在左邊的檢視器窗口我們可以看到某一個控件的信息等,包括該控件的基本屬性信息,以及構造該空間所需的必須屬性和可設置屬性,另外還有就是該控件所擁有的事件,如下圖:
- 如何在wxPython中添加事件?其實很簡單,打開檢視器窗口,切換到Evts選項卡,左邊菜單欄會列出該控件所具有的事件,然后右邊雙擊就可以了,最后,別忘了對你的更改進行提交(上面對號),如下圖:
- 下面為Boa為我們生成的界面代碼,我們的后臺邏輯代碼可以在Eclipse中利用其更好的代碼提示為我們提供便利。
1 # -*- coding: gb2312 -*- 2 3 #Boa:Frame:Frame1 4 5 6 7 import wx 8 9 10 11 def create(parent): 12 13 return Frame1(parent) 14 15 16 17 [wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1LABEL1, 18 19 ] = [wx.NewId() for _init_ctrls in range(3)] 20 21 22 23 class Frame1(wx.Frame): 24 25 def _init_ctrls(self, prnt): 26 27 # generated method, don't edit 28 29 wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt, 30 31 pos=wx.Point(426, 280), size=wx.Size(400, 250), 32 33 style=wx.DEFAULT_FRAME_STYLE, 34 35 title=u'\u6211\u7684\u7b2c\u4e00\u4e2aWxPython\u7a0b\u5e8f') 36 37 self.SetClientSize(wx.Size(384, 212)) 38 39 40 41 self.Label1 = wx.StaticText(id=wxID_FRAME1LABEL1, 42 43 label=u'\u6211\u559c\u6b22BOA', name=u'Label1', parent=self, 44 45 pos=wx.Point(64, 24), size=wx.Size(97, 25), style=0) 46 47 self.Label1.SetBackgroundColour(wx.Colour(228, 252, 230)) 48 49 self.Label1.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.NORMAL, False, 50 51 u'\u5fae\u8f6f\u96c5\u9ed1')) 52 53 54 55 self.button1 = wx.Button(id=wxID_FRAME1BUTTON1, 56 57 label=u'\u70b9\u51fb\u6309\u94ae', name='button1', parent=self, 58 59 pos=wx.Point(192, 24), size=wx.Size(75, 24), style=0) 60 61 self.button1.Bind(wx.EVT_BUTTON, self.OnButton1Button, 62 63 id=wxID_FRAME1BUTTON1) 64 65 66 67 def __init__(self, parent): 68 69 self._init_ctrls(parent) 70 71 72 73 def OnButton1Button(self, event): 74 75 76 77 fileDlg = wx.FileDialog(self,u'FileDialog',u'choose file') 78 79 re = fileDlg.ShowModal() 80 81 if re==5100: 82 83 sr= fileDlg.GetFilename() 84 85 print sr 86 87 self.ShowDlg(sr) 88 89 #todo: 90 91 event.Skip() 92 93 94 95 def ShowDlg(self,content=""): 96 97 dlg = wx.MessageDialog(self,content, 98 99 '確認框', 100 101 wx.OK | wx.ICON_INFORMATION 102 103 ) 104 105 dlg.ShowModal()
至此,BOA的使用簡單介紹到這里,后面更多的探索還要自己去慢慢摸索。
文章列表
不含病毒。www.avast.com |
留言列表