精華區beta Python 關於我們 聯絡資訊
這幾天在寫GUI 用的是wxPython,之前一直沒碰過wxWidget的玩意兒 這次第一次玩,沒想到已經成長到這種地步了 比我想像中的還來得豐富和好用太多了 該有的全都很齊全,而且都很好用,更重要的是全都是跨平台的 還是原生的介面 相較之下MFC像是跛腳的老太婆 要什麼沒什麼 囧 不能跨平臺 上手也很快,一開始,我所有介面都是用程式碼生成 當視窗漸漸擴張,我發現我在折磨我自己= = 這很痛苦,用程式寫介面 "當一樣東西一直改變、不停的改變,表示他們必需成為資料而非程式碼" 這是我最近學到的心得,於是我就想這樣的東西應該是要和程式碼分離的才對 然後就開始尋找設計GUI的IDE,在我試遍了各種五花八門的GUI 不是簡單過度,不然就是很難用 最後我找到兩款最好用的 http://www.anthemion.co.uk/dialogblocks/ 一款是DialogBlocks,這是商業軟體 展示版有限制,例如一個Window最多只能有30個元素 一開始我只找到這個,為了這個該死的限制我把視窗拆成好幾個部份 然後再用程式把它們組合起來 http://wxformbuilder.org/ 最後,我終於找到合我胃口的軟體 Open source的 wxFormBuilder,幾乎該有的都有 感覺和DialogBlocks很類似,而且沒有該死的限制 很看好這一套 不過,他們產生的程式碼都是C++,所以我用另一種方式來組合我的wxPython 使用XRC XRC是wxWidget的資源檔格式,GUI可以用這種檔案來表示,而wxWidget也有提供方式 來載入這些XRC檔 res = xrc.XmlResource(os.path.join('xrc', 'frames.xrc')) 這樣就可以載入xrc檔 接著是載入Frame或Dialog之類的 self.mainFrame = self.res.LoadFrame(parent, 'mainFrame') 還有載入某個Frame裡的control applyChangeButton = xrc.XRCCTRL(self.mainFrame, 'applyChangeButton') 這樣一來介面設計的工作就可以從程式碼裡抽離開來 然而,LoadXXXX是載入整個window的instance,如果你想繼承它,這就是個問題 為此wxPython提供一種二階段載入的方式來處理這個問題 class View(wx.Frame, ViewBase): def __init__(self, parent, res=None): self.res = res or xrc.XmlResource(os.path.join('xrc', 'frames.xrc')) pre = wx.PreFrame() self.res.LoadOnFrame(pre, parent, 'mainFrame') self.PostCreate(pre) 用LoadOnXXXX配合PreXXXX和PostCreate的方式來載入xrc 上面提到的資料都可以在wxPython的wiki裡找到 如你所見我用的是MVC的架構來寫我的GUI,雖然事件要手動綁有些腦人 不過至少已經比全手動輕鬆了很多,wxPython感覺很不錯 用起來很順手 讚 :D 以上 -- 財報分析王 http://victorlin.serveftp.org/stock/ 程式設計教學 http://victorlin.serveftp.org/programming/ VICTOR工作室 http://www.kinmen.info/vic/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.116.64.211
rexrainbow:我是用wxGlade來做gui的雛形 08/27 18:56
StubbornLin:那個我也用過 太陽春 不好用 試試WxFB 超讚 XD 08/27 20:05
rexrainbow:thx 我試試看 08/27 20:45
guteres:可以用Boa來做看看 08/28 12:22
guteres:算是蠻完整的wxpython IDE 08/28 12:22