標籤:
1. 豐富的平台
工具包 描述 Tkinter 使用Tk平台。很容易得到。半標準。 wxpython 基於wxWindows。跨平台越來越流行。 PythonWin 只能在Windows上使用。使用了原生Windows GUI功能。 JavaSwing 只能用於Jython。使用原生Java GUI。 PyGTK 使用GTK平台,在linux上很流行。 PyQt 使用Qt平台,跨平台。
2.wxpython 建立執行個體GUI
執行個體要求:
2.1 簡單的樣本程式:
>>> import wx #匯入模組 >>> app = wx.App() #初始化基本的引用程式類>>> app.MainLoop() #wx中的包方法大寫開頭,與Python習慣相反
2.2 視窗和組件
視窗也稱為架構(Frame),它是wx.Frame類的執行個體。wx架構中的組件都是由它們的父組件作為建構函式的第一個參數建立的。如果正在建立的一個單獨的視窗,就不需要考慮父組件,使用None即可。而且在調用app.MainLoop前需要調用視窗的Show方法--否則它會一直隱藏.
2.3 標籤,標題和位置
#在架構上添加按鈕也很簡單,只要使用win作為父參數執行個體化wx.Button即可.import wxapp = wx.App()win = wx.Frame(None)btn = wx.Button(win)win.Show()app.MainLoop()
import wxapp = wx.App()win = wx.Frame(None,title="Simple Editor")loadButton = wx.Button(win,label=‘Open‘)saveButton = wx.Button(win,label=‘Save‘)win.Show()app.MainLoop()
看樣子丟了一個按鈕,實際上隱藏了,如果要顯示出來,裡面的post,size就得用上.
import wxapp = wx.App()win = wx.Frame(None,title="Simple Editor",size=(410,335))win.Show()#位置座標,x與y的值loadButton = wx.Button(win,label=‘Open‘,pos=(225,5),size=(80,25))saveButton = wx.Button(win,label=‘Save‘,pos=(315,5),size=(80,25))#文字框(wx.TextCtrl的對象),預設可編輯,無捲軸filename = wx.TextCtrl(win,pos=(5,5), size=(210,25))contents = wx.TextCtrl(win,pos=(5,35),size=(390,260),style=wx.TE_MULTILINE | wx.HSCROLL)#style參數,可以使用按位或OR聯合wx模組中具有特殊名字的風格來指定#wx.TE_MULTILINE 垂直捲軸#wx.HSCROLL 水平捲軸app.MainLoop()
2.4 更智能的布局
在wx內進行布局的最簡單方法是使用尺寸器(sizer),最容易使用的工具是wx.BoxSizer。尺寸器會管理組件的尺寸。只要將組件添加到尺寸器上,再加上一些布局參數,然後讓尺寸器自己去管理父組件的尺寸。在上面的例子中,需要增加背景組件(wx.Panel),建立一些嵌套的wx.BoxSizer,然後使用面板的SetSizer方法設定它的尺寸器。
#代碼的運行效果和上例相同,只不過用相對座標而不是絕對座標import wxapp = wx.App()win = wx.Frame(None,title="Simple Editor",size=(410,335))bkg = wx.Panel(win)loadButton = wx.Button(bkg,label=‘Open‘)saveButton = wx.Button(bkg,label=‘Save‘)filename = wx.TextCtrl(bkg)contents = wx.TextCtrl(bkg,style=wx.TE_MULTILINE | wx.HSCROLL)#wx.BoxSizer兩個參數wx.HORIZONTAL(垂直),wx.VERTICAL(水平,預設)#Add方法有幾個參數,proportion參數根據在視窗改變大小時所分配空間設定比例#例如:水平的BoxSizer中,filename組件在改變大小時擷取全部的額外空間#如果這3個組件都把proprotion設定為1,那麼都會擷取相等的空間#可以講proportion設定為任何數hbox = wx.BoxSizer()hbox.Add(filename, proportion=1,flag=wx.EXPAND)hbox.Add(loadButton,proportion=0,flag=wx.LEFT,border=5)hbox.Add(saveButton,proportion=0,flag=wx.LEFT,border=5)#flag參數類似於style參數,可以使用|或者OR串連構造符號常量對其進行構造#wx.EXPAND標記確保組件會擴充到所有分配的空間中。而wx.LEFT,wx.RIGHT,wx.TOP,#wx.BOTTOM和wx.ALL標記決定邊框參數應用於哪個邊,用於設定邊緣寬度vbox = wx.BoxSizer(wx.VERTICAL)vbox.Add(hbox,proportion=0,flag=wx.EXPAND | wx.ALL,border=5)vbox.Add(contents,proportion=1, flag=wx.EXPAND | wx.LEFT | wx.BOTTOM |wx.RIGHT, border=5)bkg.SetSizer(vbox)win.Show()app.MainLoop()
2.5 最終程式
GUI術語中,使用者執行的動作(比如點擊按鈕)叫做事件(event),需要讓程式注意事件並作出反應。可以將函數綁定到所涉及的事件可能發生的組件上達到效果,當事件發生時,函數會被調用
剩下的工作,需要兩個處理函數:load和save。當事件處理函數被調用時,事件對象event是唯一的參數
#檔案名稱使用filename對象的GetValue方法擷取
#為了將文本引入文本區,只要使用contents.SetValue即可.
def load(event): file = open(filename.GetValue()) contents.SetValue(file.read()) file.close()
#save函數幾乎和load一樣,除了它有個‘w‘屬性以及write方法.
#GetValue用於從文本區獲得資訊
def save(event): file = open(filename.GetValue(),‘w‘) file.write(contents.GetValue()) file.close()
import wxdef load(event): file = open(filename.GetValue()) contents.SetValue(file.read()) file.close()def save(event): file = open(filename.GetValue(),‘w‘) file.write(contents.GetValue()) file.close()app = wx.App()win = wx.Frame(None,title="Simple Editor",size=(410,335))bkg = wx.Panel(win)loadButton = wx.Button(bkg,label=‘Open‘)loadButton.Bind(wx.EVT_BUTTON,load)saveButton = wx.Button(bkg,label=‘Save‘)saveButton.Bind(wx.EVT_BUTTON,save)filename = wx.TextCtrl(bkg)contents = wx.TextCtrl(bkg,style=wx.TE_MULTILINE | wx.HSCROLL)hbox = wx.BoxSizer()hbox.Add(filename, proportion=1,flag=wx.EXPAND)hbox.Add(loadButton,proportion=0,flag=wx.LEFT,border=5)hbox.Add(saveButton,proportion=0,flag=wx.LEFT,border=5)vbox = wx.BoxSizer(wx.VERTICAL)vbox.Add(hbox,proportion=0,flag=wx.EXPAND | wx.ALL,border=5)vbox.Add(contents,proportion=1, flag=wx.EXPAND|wx.LEFT|wx.BOTTOM|wx.RIGHT,border=5)bkg.SetSizer(vbox)win.Show()app.MainLoop()
python基礎教程總結11——圖形化使用者介面GUI