作者:
江南白衣 充分體驗(yàn)到知識(shí)循環(huán)再用的好處,原本對(duì)
Python、
wxWidgets沒(méi)有接觸的,天黑天亮之間,已經(jīng)作了一個(gè)半成品的桌面程序出來(lái)。
1.選型 通常選型之后,都會(huì)迫切的告訴別人自認(rèn)為正確的原因,這時(shí)候路過(guò)的人就比較不幸了。
我選Python和wxWidgets,是因?yàn)?......
因?yàn)槭前l(fā)布到網(wǎng)上的小程序,要它很小,Java和.Net這兩個(gè)還算當(dāng)紅但要裝虛擬機(jī)的笨家伙最先out了,而Python在
py2exe之后壓成rar才3M,如果有心思還可以弄得更小。
選
wxWidgets是因?yàn)樗梢酝ㄐ杏赪indows,Linux兩個(gè)位面,另外
Fox也能通用,不過(guò)wxWidgets是像SWT一樣用Native Widgets的,在WinXP上比較好看。
用Python而不是C++,是為了快速開(kāi)發(fā)。當(dāng)然,心底里其實(shí)是貪好玩。本來(lái)喜歡Ruby的語(yǔ)法更純潔一些,可惜
wxRuby已經(jīng)太久沒(méi)更新了。
2.wxWidgets 所謂GUI框架,萬(wàn)變不離下面幾點(diǎn):
1.框架結(jié)構(gòu)
拿個(gè)HelloWorld一看就懂,又是Application->Frame->Menu 的標(biāo)準(zhǔn)架構(gòu)。
2.wxWidgets用法
來(lái)來(lái)去去還是Text框,選擇框,按鈕幾個(gè)老面孔,在
wxPython上把wxPython2.6-win32-docs-demos-2.6.1.0.exe檔下載回來(lái),就有C++版本的API手冊(cè)與python版本的每個(gè)widgets的Demo Code。
3.控件與頁(yè)面的Layout
一種方式是C# Winform和Swing那樣在程序里生成組件和layout,經(jīng)歷過(guò)SWT手寫(xiě)代碼畫(huà)頁(yè)面的折磨,再看到一層又一層的Container代碼(wxWidgets里是Sizer)已經(jīng)不覺(jué)得麻煩了。也有所見(jiàn)即所得的工具如
BOA,不過(guò)畢竟沒(méi)有Visual Studio for WinForm那么好,難以真正使用。
一種是像Delphi, VC或未來(lái)的XAML那樣把控件和layout記在XML文件里。但我沒(méi)有用。
4.事件分發(fā)機(jī)制
像 EVT_BUTTON(self,ID_UPLOAD, self.onUpload)這樣的代碼,挺簡(jiǎn)單的。
可見(jiàn),只要有過(guò)GUI編程的經(jīng)驗(yàn),再學(xué)wxWidgets 很容易。
參考書(shū):《Cross-Platform GUI Programming with wxWidgets》
《wxPython in Action》
3. Python 手邊放一本Python的參考書(shū),只要對(duì)動(dòng)態(tài)語(yǔ)言有點(diǎn)感性認(rèn)識(shí),對(duì)著Sample Code能能猜就猜,猜不到就拿chm版的參考書(shū)來(lái)索引,也很容易入門(mén)。
最難的地方發(fā)生在遍歷目錄,那時(shí)候已經(jīng)有點(diǎn)困了:
for root, dirs, files in os.walk('C:/projects/'):
print sum(getsize(join(root, name)) for name in files) 這是什么見(jiàn)鬼語(yǔ)法阿!!
原來(lái)os.walk('C:/projects") 的返回值是一個(gè)tuple。在
C++ Boost庫(kù)中接觸過(guò)這個(gè)概念,平常函數(shù)都只能返回一個(gè)值,而tuple可以讓你返回多個(gè)(這樣就不用利用傳址的參數(shù)來(lái)返回啦),所以就有了for root,dir,files in os.walk()這樣的句子。
還有 print join(root,name) for name in files,原來(lái)python還有這種把閉包寫(xiě)在for的前面的簡(jiǎn)寫(xiě)法。
IDE最后還是用了Eclipse的插件
PyDev,畢竟Eclipse看著比較舒服,其他編輯器做得那么難看,怎么還好意思收錢(qián)。
4.美化界面 因?yàn)閣xWidgets用的是native widgets,不像Delphi,C# 和Swing有專門(mén)的look and feel 美化控件,所以美化的主要方式是為T(mén)oolbar和Button配上好看的圖標(biāo),還有修飾整個(gè)軟件的配色。
推薦Tango一個(gè)圖標(biāo)庫(kù):
http://tango-project.org/ to make open source software beautiful...說(shuō)出了我的心聲啊,"頂尖兒的程序員必有完美主義藝術(shù)家之傾向。",目前的圖標(biāo)還不多,迅速更新中。