python基礎教程總結11——圖形化使用者介面GUI

來源:互聯網
上載者:User

標籤:

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方法--否則它會一直隱藏.

  • 程式清單1: 
  • import wxapp = wx.App()win = wx.Frame(None)win.Show()app.MainLoop()

 2.3 標籤,標題和位置

  • 程式清單2: 在架構上添加按鈕
#在架構上添加按鈕也很簡單,只要使用win作為父參數執行個體化wx.Button即可.import wxapp = wx.App()win = wx.Frame(None)btn = wx.Button(win)win.Show()app.MainLoop()

 

  • 程式清單3: 使用關鍵字參數增加標籤和標題
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就得用上.

  • 程式清單4: 設定按鈕位置
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方法設定它的尺寸器。

  • 程式清單5: 使用尺寸器
#代碼的運行效果和上例相同,只不過用相對座標而不是絕對座標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()
  • 程式清單6: 最終的程式
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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.