Python GUI wxPython的相關(guān)知識整理
一、wxPython的 wx.app
這是wx的應(yīng)用程序?qū)ο?,只有在這個對象創(chuàng)建以后,相應(yīng)的UI對象才可以被正確初始化。一般最后一句是 app.MainLoop(),形成消息循環(huán),否則程序?qū)⒅苯油顺觥?/p>

(一)app.MainLoop()?
應(yīng)用程序進(jìn)入消息循環(huán),如果不循環(huán),以計算機執(zhí)行代碼的速度,咱的程序會快成一道閃電,一閃而逝。你可能會有種感覺:這就完了?好像什么都沒發(fā)生過。
(二)Frame 其實就是窗體
其實 wx.Frame 可以傳入很多參數(shù),由此來控制生成窗體的樣式和行為,現(xiàn)在來看看 Frame構(gòu)造函數(shù)的原型:
init(self, Window parent, int id=-1, String title=EmptyString,
Point pos=DefaultPosition, Size size=DefaultSize,?
long style=DEFAULT_FRAME_STYLE, String name=FrameNameStr)
· 參數(shù)1:parent
當(dāng)前窗口的父窗口,如果當(dāng)前窗口是top-level window的話,則parent=None,如果不是頂層窗口,則它的值為所屬frame的名字
?·?參數(shù)2:id
窗體編號。如果設(shè)置為-1,則系統(tǒng)自動給他分配一個編號。默認(rèn)為-1.
?·?參數(shù)3:title
窗體的標(biāo)題欄,即Caption。默認(rèn)為空。
?·?參數(shù)4:pos
窗體的位置坐標(biāo)。默認(rèn)值為(-1,-1),則窗體的位置由系統(tǒng)決定。
?·?參數(shù)5:size
窗體的大小。默認(rèn)值為(-1,-1),則窗體的大小由系統(tǒng)決定。
?·?參數(shù)6:style
窗體樣式。默認(rèn)值為 DEFAULT_FRAME_STYLE
默認(rèn)樣式 DEFAULT_FRAME_STYLE 是下面這些值的復(fù)合:
wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER |
wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN
它包括最小化按鈕、最大化按鈕、系統(tǒng)菜單、標(biāo)題欄、關(guān)閉按鈕、可變大小等等。您也可以根據(jù)自己的需求改變樣式,具體請參照幫助。
?·?參數(shù)7:name
窗體名稱。
可以看到,7個參數(shù)中6個都有默認(rèn)值,只有第一個參數(shù) parent 需要設(shè)置一下,所以一個最簡單的窗體就是:
frame = wx.Frame(None)
二、【wxPython】wx.font類字體
構(gòu)造函數(shù)形式為:
wx.Font(pointSize,family,style,weight,underline,faceName,encoding)
1. pointSize 是字體的以磅為單位的整數(shù)尺寸。
2. family 用于快速指定一個字體而無需知道該字體的實際的名字.字體的準(zhǔn)確選擇依賴于系統(tǒng)和具體可用的字體.你所得到的精確的字體將依賴于你的系統(tǒng)。字體類別如下:
?·?wx.DECORATIVE:一個正式的,老的英文樣式字體。
?·?wx.DEFAULT:系統(tǒng)默認(rèn)字體。
?·?wx.MODERN:一個單間隔(固定字符間距)字體。
?·?wx.ROMAN:serif字體,通常類似于Times New Roman。
?·?wx.SCRIPT:手寫體或草寫體。
?·?wx.SWISS:sans-serif字體,通常類似于Helvetica或Arial。
3. style 參數(shù)指明字體的是否傾斜,它的值有:
?·?wx.NORMAL,
?·?wx.SLANT,
?·?wx.ITALIC
4.?weight?參數(shù)指明字體的醒目程度,他的值有:
?·?wx.NORMAL, ? 普通字體
?·?wx.LIGHT, ? ?高亮字體
?·?wx.BOLD ?粗體
5. underline 參數(shù)僅工作在Windows系統(tǒng)下,如果取值為True,則加下劃線,F(xiàn)alse為無下劃線。
6. faceName 參數(shù)指定字體名。
7. encoding 參數(shù)允許你在幾個編碼中選擇一個,它映射內(nèi)部的字符和字本顯示字符。編碼不是Unicode編碼,只是用于wxPython的不同的8位編碼。大多數(shù)情況你可以使用默認(rèn)編碼。
三、wxPython幾種布局方式
(一)絕對布局

運行結(jié)果:

(二)使用Sizer來進(jìn)行布局優(yōu)勢
WxPython中有八種sizer供我們使用,分別是Sizer、WrapSizer、BoxSizer、GridSizer(網(wǎng)格布局)、FlexGridSizer(是GridSizer的一個更靈活的版本)、GridBagSizer(也是網(wǎng)格布局的一種)和StaticBoxSzer、StdDialogButtonSizer,我們主要對BoxSizer進(jìn)行學(xué)習(xí)。

我們在日常使用的時候一般使用BoxSizer、StaticBoxSizer、GridSizer和FlexGridSizer這四種,繼承Sizer中的方法。
BoxSizer布局:
我們可以將BoxSizer理解為一個容器或者一個箱子,里面的控件要么水平排列,要么豎直排列。而且BoxSizer之間也可以互相嵌套,從而實現(xiàn)一種非常靈活的布局方式。如圖所示:

box1 = wx.BoxSizer(wx.HORIZINTAL)????# 水平
box2 = wx.BoxSizer(wx.VERTICAL)?????# 垂直
代碼實現(xiàn):
import wx
class testBox(wx.Frame):
??def __init__(self,parent=None):
????wx.Frame.__init__(self,parent=parent)
????#生成12個按鈕
????btns = [wx.Button(self,label=str(i)) for i in range(13)]
????myStyle = wx.EXPAND|wx.ALL #設(shè)置裝填風(fēng)格
????#左側(cè)第一行的BoxSizer
????box1 = wx.BoxSizer()
????for i in range(3):
??????box1.Add(btns[i],1,myStyle,border=10)
????#左側(cè)第二行的BoxSizer
????box2 = wx.BoxSizer()
????for i in range(3,7):
??????box2.Add(btns[i],1,myStyle,border=10)
????#左側(cè)第三行的BoxSizer
????box3 = wx.BoxSizer()
????for i in range(7,12):
??????box3.Add(btns[i],1,myStyle,border=10)
????#左側(cè)BoxSizer,wx.VERTICAL表示這個BoxSizer為縱向
????leftBox = wx.BoxSizer(wx.VERTICAL)
????leftBox.Add(box1,1,myStyle,border=10)
????leftBox.Add(box2,1,myStyle,border=10)
????leftBox.Add(box3,1,myStyle,border=10)
????#總BoxSizer
????mainBox = wx.BoxSizer()
????mainBox.Add(leftBox,1,myStyle,border=10)
????mainBox.Add(btns[12],1,myStyle,border=10)
????#在框架中設(shè)置mainBox
????self.SetSizer(mainBox)
class Myapp(wx.app):
??def OnInit(self):
????self.SetappName("testbox")
????self.Frame = testBox()
????self.Frame.Show()
????return True
if __name__ == "__main__":
??test = Myapp()
??test.MainLoop()
四、wxpython 彈出框編程之 dialog(對話框)
wxpython 三種對話框示例:
1. 信息提示對話框:MessageDialog,先看看接口信息:
wxMessageDialog(wxWindow* parent, const wxString& message, const wxString& caption = "Message box", long style = wxOK | wxCANCEL, const wxPoint& pos = wxDefaultPosition)

其各參數(shù)不多做介紹,主要看看ShowModal()方法,它使用應(yīng)用程序在對話框關(guān)閉前不能響應(yīng)其它窗口的用戶事件,返回一個整數(shù),取值如下:
wx.ID_YES, wx.ID_NO, wx.ID_CANCEL, wx.ID_OK
另外,style的取值主要有以下幾種:

2. 輸入文本內(nèi)容對話框:wx.TextEntryDialog
3. 選擇對話框:wx.SingleChoiceDialog
4. 標(biāo)準(zhǔn)文件對話框:wx.FileDialog
5.?標(biāo)準(zhǔn)的顏色選擇器