標籤:net sum ctr 相對 編譯 python版本 組件 標籤 try
Python支援的工具包非常多。但沒有一個被覺得標準的工具包。使用者選擇的自由度大些.本章主要介紹最成熟的跨平台工具包wxPython.官方文檔: http://wxpython.org/
------
豐富的平台:
Tkinter實際上類似於標準,由於它被用於大多數正式的Python GUI程式。並且它是Windows二進位公布版的一部分。
可是在UNIX上要自己編譯安裝。
還有一個越來越受歡迎的工具是wxPython。
這是個成熟並且特性豐富的包,也是Python之父,Guido van Rossum的最愛
------
下載安裝wxPython
http://wxpython.org/download.php
NOTE:
1. 注意選擇跟自己PC的二進位版本號碼相應的Python版本號碼
2. 下載wxPython後,強烈建議下載示範版本號碼(demo),示範範例程式很具體
------
建立示範範例GUI程式
最簡單的示範範例程式例如以下:
>>> import wx #匯入模組
>>> app = wx.App() #初始化主要的引用程式類
>>> app.MainLoop() #wx中的包方法大寫開頭,與Python習慣相反
表單和組件
表單也稱為架構,它是wx.Frame類的執行個體。wx架構中的組件都是由它們的父組件作為建構函式的第一個參數建立的。假設正在建立的一個單獨的表單,就不須要考慮父組件,使用None就可以。
並且在調用app.MainLoop前須要調用表單的
Show方法--否則它會一直隱藏.
import wxapp = wx.App()win = wx.Frame(None)win.Show()app.MainLoop()
#在架構上加入button也非常easy,僅僅要使用win作為父參數執行個體化wx.Button就可以.
import wxapp = wx.App()win = wx.Frame(None)btn = wx.Button(win)win.Show()app.MainLoop()
- 程式清單3: 使用keyword參數添加標籤和標題
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()
看樣子丟了一個button,實際上隱藏了。假設要顯示出來,裡面的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()
------
更智能的布局
在wx內進行布局的最簡單方法是使用尺寸器(sizer),最easy使用的工具是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()
布局已經好了,但點擊button後什麼反應也沒有
------
完畢了的程式
剩下的工作,須要兩個處理函數: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()
------
其它工具包
能夠看以下最簡單範例,僅僅有一個表單,帶有Hello標籤的button,點擊button時。它會列印文本"Hello,World!"
代碼例如以下:
import wxdef hello(event): print "Hello,World!"app = wx.App()win = wx.Frame(None,title="Hello,wxPython!",size=(200,100))button = wx.Button(win,label=‘Hello‘)button.Bind(wx.EVT_BUTTON,hello)win.Show()app.MainLoop()
------
使用Tkinter
Python內建的,以下是使用Tkinter實現的GUI程式
from Tkinter import *def hello(): print (‘Hello,World!‘) win = Tk()win.title(‘Hello,Tkinter!‘)win.geometry(‘200x100‘)btn = Button(win,text=‘Hello‘,command=hello)btn.pack(expand=YES,fill=BOTH)mainloop()
------
其它還能夠使用Jython和Swing
Jython: Python的Java實現,類似於wxPython和Tkinter這種包就不能用了。唯一可用的GUI工具包是Java標準庫包
中的AWT和Swing。
<<Python基礎教程>>學習筆記 | 第12章 | 圖形化使用者介面