Python的可視化編程工具wxglade是一個用python實現(xiàn)的wxwidgets的界面設(shè)計工具,使用wxPython搞開發(fā)時,做界面一般都是wxGlade,以前我只用過wxWidgets+wxFormBuilder的組合,感覺wxPython+wxGlade確實效率更高些,當然這受益于python語言的簡潔易用。
wxGlade 啟動以后默認產(chǎn)生三個窗口, 下面的這個窗口是它的工具欄窗口,你可以看到可以wxglage可以使用的各種控件類型,樹狀列表窗口顯示當前已經(jīng)添加進去的各種可視化控件以及它們的繼 承關(guān)系.屬性窗口則顯示當前活動控件的各種屬性,其中根節(jié)點Application則讓你控制和全局相關(guān)的一些選項和操作.
wxGlade 使用的GUI框架是 wxPython。
wxglade布局的使用教程:
wxGlade是wxWidgets及wxPython的界面設(shè)計工具。
wxGlade使用的是基于Sizer的界面布局器,與Delphi的位置大小布局完全不同。
其中有關(guān)布局的控件屬性都在Layout屬性頁上設(shè)定,即當前控件在Sizer中用于定位的一些參數(shù)。
具體地wxglade參數(shù):
Pos :當前控件在Sizer中所處的位置,數(shù)字越小越靠前。
Option :這個屬性現(xiàn)在在wxWidget中叫做proportion,負責控制當前控件在當前Sizer中所占用的空間大。喝绻≈禐0時,當前控件多大,那么 Sizer中對應(yīng)的格子也多大;如果取值為非零的值,那么該Sizer中所有取值大于0的格子之間以wxglade參數(shù):proportion的取值作為其大小的比例。比如 Sizer中有4個格子,proportion分別取值為1、0、2、3,那么其第1、3、4個格其長/寬的大小比例就是1:2:3,第2個格子的大小則 根據(jù)里面放的控件的大小來決定。
Border :當前控件放在Sizer中時周圍空多少像素,wxGlade的參數(shù)設(shè)置中有一個選項是將所有的控件的Border值都默認置為3,通常3個像素也是比較不錯的一個取值。
wxALL :如果選中則四邊都保留Border所指定的空間。
wxLEFT :如果選中則控件左側(cè)保留Border所指定的空間。
wxRIGHT :如果選中則控件右側(cè)保留Border所指定的空間。
wxTOP :如果選中則控件上方保留Border所指定的空間。
wxBOTTOM:如果選中則控件下方保留Border所指定的空間。
wxEXPAND:如果選中則控件占據(jù)所有所在Sizer格子分配給的空間。
wxALIGN_RIGHT :如果選中則控件在所在Sizer格子中右對齊,否則左對齊。
wxALIGN_BOTTOM:如果選中則控件在所在Sizer格子中向下對齊,否則向上方對齊。
wxALIGN_CENTER_HORIZONTAL:如果選中則控件在Sizer所分配的格子里水平居中。
wxALIGN_CENTER_VERTICAL:如果選中則控件在Sizer所分配的格子里垂直居中。
wxSHAPED :如果選中則控件占據(jù)全部Sizer格子提供的空間,并且在擴展控件大小的時候保持長寬比例。
wxADJUST_MINSIZE :可能是讓控件隨著控件中內(nèi)容的變化自動改變最適合其內(nèi)容的控件最小大小。
wxFIXED_MINSIZE :通常控件會根據(jù)其中的內(nèi)容自動確定一個適合的控件最小的大小,選中此選項將讓此最小大小固定下來,不再隨著控件中內(nèi)容的變化而改變。
幾點使用體會:
1)wxGlade自動生成的代碼可以和自己寫的代碼和平共處。在使用wxFormBuilder時,除了生成界面代碼,還要生成派生類代碼,這樣界面代碼不需要做任何修改,自己的代碼直接寫在派生類中。這種方法比較面向?qū)ο罅,但是缺點是派生類代碼生成后如果要改變,就必須合并自己寫的代碼。而wxGlade生成的界面代碼可以往里面添加自己的代碼,界面改變后重新生成代碼并不會刪除你自己的代碼。這主要靠代碼中的一些wxGlade標記注釋實現(xiàn)。比如# begin wxGlade: MainFrame.__init__和# end wxGlade之間的代碼是wxGlade生成的,你不能在這里面加代碼,否則會被覆蓋掉,但在外面加就沒問題了。
2)使用方式方面wxGlade和wxFormBuilder基本差不多。都支持自定義控件。不過wxFormBuilder需要填自定義控件的構(gòu)造等,而wxGlade只要填一個類名。使用是簡單了,但是沒法自己寫構(gòu)造函數(shù),比如我使用了一個wx.gizmos.TreeListCtrl,構(gòu)造時想加入一些style是不行了。另外,wxGlade也不支持wxAUI,還是很遺憾的。
3)wxGlade的菜單和工具條編輯器不能使用wxArt提供的圖片,只能使用外部載入的圖片。
4)wxGlade不能自動生成id的define,我只能填一個數(shù),不過在菜單上可以填-1,因為事件綁定是使用名字,而工具條就不行了,只能填數(shù)了。不過wxPython的事件綁定使用方式和wxWidgets不太一樣,wxFormBuilder是自動生成id的define的,事件通過id綁定,工具條和菜單使用同一id即可關(guān)聯(lián)。而wxPython+wxGlade時,我是通過填入相同的事件處理器來完成。不過他們都沒有SWT的菜單和工具條關(guān)聯(lián)的機制方便~ SWT很久沒用了,依稀記得只要定義action即可
5)Layout編輯還OK,wxGlade還可以更換sizer的類型,貌似wxFormBuilder不行