wxPython程式由兩個必要的物件組成,應用物件APP和頂級視窗物件Frame
應用程式物件APP管理主事件迴圈MainLoop()
頂級視窗物件Frame管理資料,控制並呈現給使用者
先看一段最簡單的程式碼:
import wx class App(wx.App): def OnInit(self): frame = wx.Frame(parent = None, title = "Kobe") frame.Show() return True app = App() app.MainLoop()
上面的程式碼說明了開發wxPython程式必須的5個步驟:
1. 匯入wxPython包
2. 子類化wxPython應用類
3. 定義應用程式的初始化方法
4. 建立一個應用程式類的例項
5. 進入這個應用程式的主事件迴圈(MainLoop())
OnInit()方法沒有引數,返回值為BOOL,此部分可以做一些關鍵資料初始化的動作,如果失敗,返回False,程式退出。通常會在此方法中建立一個Frame物件,並呼叫Frame的Show()方法。
應用程式物件開始於例項被建立時,結束於最後一個應用程式視窗被關閉,與Python指令碼開始執行沒有先後關係。
每個wxPython程式必須有一個application物件和至少一個frame物件。application物件必須是wx.App的一個例項或在OnInit()方法中定義的一個子類的一個例項,當程式啟動時,OnInit()方法將被wx.App父類呼叫。
上面的程式碼中,定義了名為MyApp的子類,在OnInit()方法中建立frame物件。
wx.Frame(self, parent, id, title, pos, size, style, name)
其中,只有parent是必須的,其餘都有預設值,返回值為空。下面是其各個引數的型別:
parent (type=Window) id (type=int) pos (type=Point) size (type=Size) style (type=long) name (type=String) Returns: bool
呼叫Show()方法使frame可見,否則不可見。可以透過給Show一個布林值引數來設定frame的可見性:
frame.Show(False) # 框架不可見 frame.Show(True) # 框架可見 frame.Hide() # 等同於frame.Show(False)
該程式並沒有定義一個__init__()方法,意味著父方法wx.App.__init()__將在物件建立時被自動呼叫。若自己定義__init__()方法,還需要呼叫其基類的__init__()方法。
class App(wx.APP): def __init__(self): wx.APP.__init__(self)
如果沒有這樣做, wxPython將不被初始化,並且OnInit()方法也不會呼叫
當程式進入主迴圈後,控制權將轉交給wxPython。wxPython GUI程式主要響應使用者的滑鼠和鍵盤事件。當一個應用程式的所有框架被關閉後,app.MainLoop()方法將返回,程式退出。
import wx class Frame(wx.Frame): def __init__(self, image, parent=None, id =-1, pos = wx.DefaultPosition, title = "Hello, wxPython!"): temp = image.ConvertToBitmap() size = temp.GetWidth(), temp.GetHeight() wx.Frame.__init__(self, parent, id, title, pos, size) self.bmp = wx.StaticBitmap(parent = self, bitmap = temp) class App(wx.App): def OnInit(self): image = wx.Image('wxPython.jpg', wx.BITMAP_TYPE_JPEG) self.frame = Frame(image) self.frame.Show() self.SetTopWindow(self.frame) return True def main(): app = App() app.MainLoop() if __name__ == '__main__': main()