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()