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


這是什么見鬼語法阿!!
原來os.walk('C:/projects") 的返回值是一個tuple。在C++ Boost庫中接觸過這個概念,平常函數都只能返回一個值,而tuple可以讓你返回多個(這樣就不用利用傳址的參數來返回啦),所以就有了for root,dir,files in os.walk()這樣的句子。
還有 print join(root,name) for name in files,原來python還有這種把閉包寫在for的前面的簡寫法。
IDE最后還是用了Eclipse的插件PyDev,畢竟Eclipse看著比較舒服,其他編輯器做得那么難看,怎么還好意思收錢。
4.美化界面
因為wxWidgets用的是native widgets,不像Delphi,C# 和Swing有專門的look and feel 美化控件,所以美化的主要方式是為Toolbar和Button配上好看的圖標,還有修飾整個軟件的配色。
推薦Tango一個圖標庫:http://tango-project.org/ to make open source software beautiful...說出了我的心聲啊,"頂尖兒的程序員必有完美主義藝術家之傾向。",目前的圖標還不多,迅速更新中。
http://python.cn/site_mailling_list
我在solidot.org引用了您的這篇文章:
http://solidot.org/article.php/2005111818254921
上面很多你的文章阿,你是那里的web master?
我只是個編輯而已
看你的blog一年多了(似乎也換了不少地兒) ;-)
這是關于solidot.org的一個介紹:
http://solidot.org/staticpages/index.php/about
能加你么,my qq is 228013, MSN is calvinxiu@hotmail.com .
很榮幸,已添加 :)
[引用提示]naive1010引用了該文章, 地址: http://blog.csdn.net/naive1010/archive/2005/11/22/534600.aspx
這個chm哪里有?謝謝
ed2k://|file|Manning,.wxPython.in.Action.(2006).BBL.LotB.pdf|13172259|4BA9DB160BE9386E27CFF81216575DF2|/
首先沒有一個好的IDE環境,調試等都是比較困難。
我認為將其作為一個系統的外置腳本插件倒是不錯。
http://www.jianianle.com/cate/lunyi.html
首先沒有一個好的IDE環境,調試等都是比較困難。
http://www.paint.net.cn/news.aspx