api文檔以及中文教程:python
https://pan.baidu.com/s/1TDTgHg9Mwc74ODQy68YnlQlinux
提取碼:354napi
import wx#1 class App(wx.App):#2 def OnInit(self):#3 frame=wx.Frame(parent=None,title ='Bare') frame.Show() return True if __name__=="__main__": app = App(0)#4 app.MainLoop()#5
上面的代碼的任何一行都不能少,不然將不能工做。這個基本的wxPython 程序說明了開發任一wxPython程序所必須的五個基本步驟:
一、導入必須的wxPython包
二、子類化wxPython應用程序類
三、定義一個應用程序的初始化方法
四、建立一個應用程序類的實例
五、進入這個應用程序的主事件循環
導入wxPythonapp
你須要作的第一件事就是導入這個主要的wxPython包,這個包名爲wx: import wx 一旦這個包被導入,你就能夠引用wxPython的類、函數和常量(它們以wx 爲前綴)。
使用應用程序和框架工做框架
一旦你導入了wx模塊,你就可以建立你的應用程序(application)對象和 框架(frame)對象。每一個wxPython程序必須有一個application對象和至少一個 frame對象。application對象必須是wx.App的一個實例或你在OnInit()方法中定義 的一個子類的一個實例。當你的應用程序啓動的時候,OnInit()方法將被 wx.App父類調用。 子類化wxPython application類 下面的代碼演示瞭如何定義咱們的wx.App的子類: class MyApp(wx.App): def OnInit(self): frame = wx.Frame(parent=None, id=-1, title=」Bare」) frame.Show() return True 上面咱們定義了一個名爲MyApp的子類。咱們一般在OnInit()方法中建立 frame對象。上面的wx.Frame接受三個參數,僅第一個是必須的,其他的都有默 認值。 調用Show()方法使frame可見,不然不可見。咱們能夠經過給Show()一個布 爾值參數來設定frame的可見性: frame.Show(False) # 使框架不可見. frame.Show(True) # True是默認值,使框架可見. frame.Hide() # 等同於frame.Show(False) 定義一個應用程序的初始化方法 注意:咱們沒有爲咱們的應用程序類定義一個__init__()方法。在Python中,這就意 味着父方法wx.App.__init()__將在對象建立時被自動調用。這是一個好的事情。若是 你定義你本身的__init__()方法,不要忘了調用其基類的__init()__方法,示例以下: class App(wx.App): def __init__(self): wx.App.__init__(self) 若是你忘了這樣作,wxPython不將被初始化而且你的OnInit()方法也不將獲得調用。 建立一個應用程序實例並進入它的主事件循環 這步是建立wx.App子類的實例,並調用它的MainLoop()方法: app = App() app.MainLoop() 一旦進入主事件循環,控制權將轉交給wxPython。wxPython GUI程序主要 響應用戶的鼠標和鍵盤事件。當一個應用程序的全部框架被關閉後,這個 app.MainLoop()方法將返回且程序退出。
#!/usr/bin/env python #1 '''Spare.py is a starting point for a wxPython program.''' #2 import wx#1 class Frame(wx.Frame):#3 pass class App(wx.App):#2 def OnInit(self):#3 self.frame=wx.Frame(parent=None,title ='Spare')#4 self.SetTopWindow(self.frame)# 5 self.frame.Show() return True if __name__=="__main__":#6 app = App(0) app.MainLoop()
#1 這行看似註釋,可是在如linux和unix等操做系統上,它告訴操做系統如 何找到執行程序的解釋器。若是這個程序被給予的可執行權限(例如使用 chmod命令),咱們能夠在命令行下僅僅鍵入該程序的名字來運行這個程序: % spare.py 這行在其它的操做系統上將被忽略。可是包含它能夠實現代碼的跨平臺。 #2 這是文檔字符串,當模塊中的第一句是字符串的時候,這個字符串就成 了該模塊的文檔字符串並存儲在該模塊的__doc__屬性中。你可以在你的代碼 中、某些開發平臺、甚至交互模式下運行的Python解釋器中訪問文檔字符串: >>> import spare >>> print spare.__doc__ Spare.py is a starting point for simple wxPython programs. >>> #3 咱們改變了大家建立frame對象的方法。bare版的程序簡單地建立了一個 wx.Frame類的實例。在spare版中,咱們定義了咱們本身的Frame類做爲 wx.Frame的子類。此時,最終的結果沒有什麼不一樣,可是若是你想在你的框架 中顯示諸如文本、按鈕、菜單的話,你可能就想要你本身的Frame類了。 #4 咱們將對frame實例的引用做爲應用程序實例的一個屬性。 #5 在OnInit()方法中,咱們調用了這個App類本身的SetTopWindow()方法, 並傳遞給它咱們新建立的frame實例。咱們沒必要定義SetTopWindow()方法,由於 它繼承自wx.App父類。SetTopWindow()方法是一個可選的方法,它讓wxPython 方法知道哪一個框架或對話框將被認爲是主要的。一個wxPython程序能夠有幾個 框架,其中有一個是被設計爲應用程序的頂級窗口的。 #6 這個是Python中一般用來測試該模塊是做爲程序獨立運行仍是被另外一模 塊所導入。咱們經過檢查該模塊的__name__屬性來實現: if __name__ == ’__main__’: app = App() app.MainLoop()
#!/usr/bin/env python import wx class Frame(wx.Frame): #2 wx.Frame子類 # 3圖像參數 def __init__(self,image,parent = None,id = -1,pos = wx.DefaultPosition,title ='Hello, wxPython!'): # 4 顯示圖像 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): #5 wx.App子類 # 6 圖像處理 def OnInit(self): image=wx.Image('back1.jpg',wx.BITMAP_TYPE_JPEG) self.frame=wx.Frame(image) self.frame.Show() self.SetTopWindow(self.frame) return True if __name__=="__main__": #7 app = App(0) app.MainLoop()
說明: #2 定義一個wx.Frame的子類,以便咱們更容量控制框架的內容和外觀。 #3 給咱們的框架的構造器增長一個圖像參數。這個值經過咱們的應用程序 類在建立一個框架的實例時提供。一樣,咱們能夠傳遞必要的值 wx.Frame.__init__() #4 咱們將用wx.StaticBitmap控件來顯示這個圖像,它要求一個位圖。因此 咱們轉換圖像到位圖。咱們也使用圖像的寬度和高度建立一個size元組。這個 size元組被提供給wx.Frame.__init__()調用,以便於框架的尺寸匹配位圖尺寸。 #5 定義一個帶有OnInit()方法的wx.App的子類,這是wxPython應用程序最 基本的要求。 #6 咱們使用與hello.py在同一目錄下的名爲back1.jpg的文件建立了一個 圖像對象。 #7 main()函數建立一個應用程序的實例並啓動wxPython的事件循環。
#!/usr/bin/env python import wx class Frame(wx.Frame): #2 wx.Frame子類 def __init__(self,parent = None,id = -1,title ='wxPython!'): wx.Frame.__init__(self,parent,id,title,size=(500,500)) #顯示按鈕 self.buttonOK=wx.Button(self,-1,u'ok',(20,20),(60,30)) self.Bind(wx.EVT_BUTTON,self.Onclick,self.buttonOK) self.buttonCancel=wx.Button(self,-1,u'cancel',(20,80),(60,30)) self.Bind(wx.EVT_BUTTON, self.Onclick,self.buttonCancel) #處理事件 def Onclick(self,event): if event.GetEventObject()==self.buttonOK: print("{}".format(event.GetEventObject().GetLabel())) elif event.GetEventObject()==self.buttonCancel: print("{}".format(event.GetEventObject().GetLabel())) class App(wx.App): #5 wx.App子類 def __init__(self): #若是要重寫__init__,必須調用wx.App的__init__,不然OnInit方法不會被調用 wx.App.__init__(self) def OnInit(self): self.frame=Frame() self.SetTopWindow(self.frame) self.frame.Show() return True if __name__=="__main__": app = App() app.MainLoop()
#!/usr/bin/env python import wx,time class Frame(wx.Frame): #2 wx.Frame子類 def __init__(self,parent = None,id = -1,title ='wxPython!'): wx.Frame.__init__(self,parent,id,title,size=(500,500)) self.setupStatusBar() #顯示按鈕功能 self.buttonOK=wx.Button(self,-1,u'ok',(20,20),(60,30)) self.Bind(wx.EVT_BUTTON,self.Onclick,self.buttonOK) self.buttonCancel=wx.Button(self,-1,u'cancel',(20,80),(60,30)) self.Bind(wx.EVT_BUTTON, self.Onclick,self.buttonCancel) #設置狀態欄 def setupStatusBar(self): # 狀態欄 sb = self.CreateStatusBar(2) # 2表明將狀態欄分爲兩個 self.SetStatusWidths([-1, -2]) # 比例爲1:2 self.SetStatusText("Ready", 0) # 0表明第一個欄,Ready爲內容 # timmer self.timer = wx.PyTimer(self.Notify) self.timer.Start(1000, wx.TIMER_CONTINUOUS) self.Notify() #處理事件 def Onclick(self,event): if event.GetEventObject()==self.buttonOK: print("{}".format(event.GetEventObject().GetLabel())) elif event.GetEventObject()==self.buttonCancel: print("{}".format(event.GetEventObject().GetLabel())) #實時顯示時間 def Notify(self): t=time.localtime(time.time()) st=time.strftime('%Y-%m-%d %H:%M:%S',t) self.SetStatusText(st,1)#這裏的1表明將時間放入狀態欄的第二部分上 class App(wx.App): #5 wx.App子類 def __init__(self): #若是要重寫__init__,必須調用wx.App的__init__,不然OnInit方法不會被調用 wx.App.__init__(self) def OnInit(self): self.frame=Frame() self.SetTopWindow(self.frame) self.frame.Show() return True if __name__=="__main__": app = App() app.MainLoop()
#!/usr/bin/env python import wx,time ID_EXIT=200 ID_ABOUT=201 class Frame(wx.Frame): #2 wx.Frame子類 def __init__(self,parent = None,id = -1,title ='wxPython!'): wx.Frame.__init__(self,parent,id,title,size=(500,500)) self.setupStatusBar() self.InitButton() self.InitMenu() #設置狀態欄 def setupStatusBar(self): # 狀態欄 sb = self.CreateStatusBar(2) # 2表明將狀態欄分爲兩個 self.SetStatusWidths([-1, -2]) # 比例爲1:2 self.SetStatusText("Ready", 0) # 0表明第一個欄,Ready爲內容 # timmer self.timer = wx.PyTimer(self.Notify) self.timer.Start(1000, wx.TIMER_CONTINUOUS) self.Notify() #處理事件 def Onclick(self,event): if event.GetEventObject()==self.buttonOK: print("{}".format(event.GetEventObject().GetLabel())) elif event.GetEventObject()==self.buttonCancel: print("{}".format(event.GetEventObject().GetLabel())) #實時顯示時間 def Notify(self): t=time.localtime(time.time()) st=time.strftime('%Y-%m-%d %H:%M:%S',t) self.SetStatusText(st,1)#這裏的1表明將時間放入狀態欄的第二部分上 def InitButton(self): # 顯示按鈕功能 self.buttonOK = wx.Button(self, -1, u'ok', (20, 20), (60, 30)) self.Bind(wx.EVT_BUTTON, self.Onclick, self.buttonOK) self.buttonCancel = wx.Button(self, -1, u'cancel', (20, 80), (60, 30)) self.Bind(wx.EVT_BUTTON, self.Onclick, self.buttonCancel) def InitMenu(self): # 主菜單 menubar = wx.MenuBar() # 子菜單:退出(Quit) fmennu = wx.Menu() fmennu.Append(ID_EXIT, u'退出(&Q)', 'Terminate thr program') menubar.Append(fmennu, u'文件(&F)') # 將子菜單添加到文件(File)中 # 子菜單:關於(About) hmenu = wx.Menu() hmenu.Append(ID_ABOUT, u'關於(&A)', 'More information about this program') menubar.Append(hmenu, u'幫助(&H)') # 將子菜單添加到幫助(Help)中 self.SetMenuBar(menubar) # 綁定子菜單 wx.EVT_MENU(self, ID_EXIT, self.OnMenuExit) wx.EVT_MENU(self, ID_ABOUT, self.OnMenuAbout) wx.EVT_CLOSE(self, self.OnCloseWindow) def OnMenuExit(self,event): self.Close() def OnMenuAbout(self,event): dlg=AboutDialog(None,-1) dlg.ShowModal() dlg.Destroy() def OnCloseWindow(self,event): self.Destroy() class AboutDialog(wx.Dialog): def __init__(self,parent,id): wx.Dialog.__init__(self,parent,id,'About Me',size=(200,200)) #BoxSizer爲一個盒子,wx.VERTICAL self.sizer1=wx.BoxSizer(wx.VERTICAL) self.sizer1.Add(wx.StaticText(self,-1,u'wxPython初級教程'),0,wx.ALIGN_CENTER_HORIZONTAL|wx.TOP,border=20) self.sizer1.Add(wx.StaticText(self, -1, u'wxPython初級教程'), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.TOP, border=10) self.sizer1.Add(wx.StaticText(self, -1, u'wxPython初級教程'), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.TOP, border=10) self.sizer1.Add(wx.StaticText(self, -1, u'wxPython初級教程'), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.TOP, border=10) self.sizer1.Add(wx.Button(self,wx.ID_OK),0,wx.ALIGN_CENTER|wx.BOTTOM,border=20) self.SetSizer(self.sizer1) class App(wx.App): #5 wx.App子類 def __init__(self): #若是要重寫__init__,必須調用wx.App的__init__,不然OnInit方法不會被調用 wx.App.__init__(self) def OnInit(self): self.frame=Frame() self.SetTopWindow(self.frame) self.frame.Show() return True if __name__=="__main__": app = App() app.MainLoop()
import wx # 自定義窗口類MyFrame class MyFrame(wx.Frame): def __init__(self): super().__init__(parent=None, title="菜單", size=(400, 300)) self.Center() #窗口居中 self.text = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE) #建立一個多行文本控件 vbox = wx.BoxSizer(wx.VERTICAL) #建立一個垂直佈局管理器 self.SetSizer(vbox)#爲此窗口添加此佈局管理器 vbox.Add(self.text, 1, flag=wx.EXPAND | wx.ALL, border=1) #將文本添加進當前窗口 menubar = wx.MenuBar() # 建立一個菜單欄, self.SetMenuBar(menubar) # 給窗口添加此菜單欄 file_menu = wx.Menu() # 建立一個菜單 menubar.Append(file_menu, 'File') # 在菜單欄上添加此菜單 file_menu.Append(id=wx.ID_NEW, item='New', helpString='new file') # 往菜單中添加一個菜單項 self.Bind(wx.EVT_MENU, self.on_newitem_click, id=wx.ID_NEW) # 爲此菜單項添加事件處理 file_menu.AppendSeparator() # 分割線 edit_menu = wx.Menu() # 建立一個edit_menu菜單 file_menu.AppendSubMenu(edit_menu, "Edit") # file_menu上面添加edit_menu菜單 copy_item = wx.MenuItem(edit_menu, 100, text="Copy", kind=wx.ITEM_NORMAL) # 建立copy_item菜單項 edit_menu.Append(copy_item) # edit_menu菜單添加copy_item菜單項 cut_item = wx.MenuItem(edit_menu, 101, text="Cut", kind=wx.ITEM_NORMAL) # 建立cut_item菜單項 edit_menu.Append(cut_item) # edit_menu菜單添加cut_item菜單項 paste_item = wx.MenuItem(edit_menu, 102, text="Paste", kind=wx.ITEM_NORMAL) # 建立paste_item菜單項 edit_menu.Append(paste_item) # edit_menu菜單添加paste_item菜單項 self.Bind(wx.EVT_MENU, self.on_editmenu_click, id=100, id2=102) # 爲這3個添加事件處理 def on_newitem_click(self, event): self.text.SetLabel('單擊【New】菜單') def on_editmenu_click(self, event): event_id = event.GetId() if event_id == 100: self.text.SetLabel('單擊【Copy】菜單') elif event_id == 101: self.text.SetLabel('單擊【Cut】菜單') else: self.text.SetLabel('單擊【Paste】菜單') class App(wx.App): def OnInit(self): # 建立窗口對象 frame = MyFrame() frame.Show() return True def OnExit(self): print("quit") return 0 if __name__ == '__main__': app = App() app.MainLoop()
建立菜單欄:wxMenuBar() 建立菜單:wx.Menu() 建立菜單項:wx.MenuItem(parentMenu,id,text) 添加子菜單:menu.AppendSubMenu(subMenu,text) 添加菜單項:menu.Append(menuItem)
import wx # 自定義窗口類MyFrame class MyFrame(wx.Frame): def __init__(self): super().__init__(parent=None, title="菜單欄和工具欄", size=(500, 400)) self.Center() #窗口居中 self.text = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE) #建立一個多行文本控件 vbox = wx.BoxSizer(wx.VERTICAL) #建立一個垂直佈局管理器 self.SetSizer(vbox)#爲此窗口添加此佈局管理器 vbox.Add(self.text, 1, flag=wx.EXPAND | wx.ALL, border=1) #將文本添加進當前窗口 menubar = wx.MenuBar() # 建立一個菜單欄, self.SetMenuBar(menubar) # 給窗口添加此菜單欄 file_menu = wx.Menu() # 建立一個菜單 menubar.Append(file_menu, 'File') # 在菜單欄上添加此菜單 file_menu.Append(id=wx.ID_NEW, item='New', helpString='new file') # 往菜單中添加一個菜單項 self.Bind(wx.EVT_MENU, self.on_newitem_click, id=wx.ID_NEW) # 爲此菜單項添加事件處理 file_menu.AppendSeparator() # 分割線 edit_menu = wx.Menu() # 建立一個edit_menu菜單 file_menu.AppendSubMenu(edit_menu, "Edit") # file_menu上面添加edit_menu菜單 copy_item = wx.MenuItem(edit_menu, 100, text="Copy", kind=wx.ITEM_NORMAL) # 建立copy_item菜單項 edit_menu.Append(copy_item) # edit_menu菜單添加copy_item菜單項 cut_item = wx.MenuItem(edit_menu, 101, text="Cut", kind=wx.ITEM_NORMAL) # 建立cut_item菜單項 edit_menu.Append(cut_item) # edit_menu菜單添加cut_item菜單項 paste_item = wx.MenuItem(edit_menu, 102, text="Paste", kind=wx.ITEM_NORMAL) # 建立paste_item菜單項 edit_menu.Append(paste_item) # edit_menu菜單添加paste_item菜單項 self.Bind(wx.EVT_MENU, self.on_editmenu_click, id=100, id2=102) # 爲這3個添加事件處理 #工具欄 tb=wx.ToolBar(self,wx.ID_ANY) #建立工具欄對象 self.ToolBar=tb #將此工具欄對象放入當前窗口 #設置工具欄圖標大小 tsize=(30,30) #建立4個Bitmap圖標 new_bmp=wx.ArtProvider.GetBitmap(wx.ART_NEW,wx.ART_TOOLBAR,tsize) open_bmp = wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN, wx.ART_TOOLBAR, tsize) copy_bmp = wx.ArtProvider.GetBitmap(wx.ART_COPY, wx.ART_TOOLBAR, tsize) paste_bmp = wx.ArtProvider.GetBitmap(wx.ART_PASTE, wx.ART_TOOLBAR, tsize) #將這4個圖標放入工具欄 tb.AddTool(200,'new',new_bmp,'New') tb.AddTool(201, 'open', open_bmp, 'Open') tb.AddTool(202, 'copy', copy_bmp, 'Copy') tb.AddTool(203, 'paste', paste_bmp, 'Paste') #分割 tb.AddSeparator() #放入2個本身提供的圖標 tb.AddTool(204, 'back',wx.Bitmap('icon/back.png'), 'back') tb.AddTool(205, 'forward', wx.Bitmap('icon/forward.png'), 'Forword') #爲這6個圖標綁定事件處理 self.Bind(wx.EVT_MENU,self.on_click_tool,id=200,id2=205) tb.Realize() #提交工具欄設置 #爲New菜單項添加事件處理 def on_newitem_click(self, event): self.text.SetLabel('新建') #爲Copy,Cut,Paste菜單項添加事件處理 def on_editmenu_click(self, event): event_id = event.GetId() if event_id == 100: self.text.SetLabel('複製') elif event_id == 101: self.text.SetLabel('剪切') else: self.text.SetLabel('粘貼') #爲工具欄的圖標添加事件處理 def on_click_tool(self,event): event_id=event.GetId() if event_id==200: self.text.SetLabel('新建') elif event_id==201: self.text.SetLabel('打開') elif event_id==202: self.text.SetLabel('複製') elif event_id==203: self.text.SetLabel('粘貼') elif event_id==204: self.text.SetLabel('後退') else: self.text.SetLabel('前進') class App(wx.App): def OnInit(self): # 建立窗口對象 frame = MyFrame() frame.Show() return True def OnExit(self): print("quit") return 0 if __name__ == '__main__': app = App() app.MainLoop()
#!/usr/bin/env python ''' 靜態文本、可控文本、對話框、GetApp() ''' import wx,time ID_EXIT=200 ID_ABOUT=201 class Frame(wx.Frame): #2 wx.Frame子類 def __init__(self,parent = None,id = -1,title ='wxPython!'): wx.Frame.__init__(self,parent,id,title,size=(500,500)) self.setupStatusBar() self.InitButton() self.InitMenu() #設置狀態欄 def setupStatusBar(self): # 狀態欄 sb = self.CreateStatusBar(2) # 2表明將狀態欄分爲兩個 self.SetStatusWidths([-1, -2]) # 比例爲1:2 self.SetStatusText("Ready", 0) # 0表明第一個欄,Ready爲內容 # timmer self.timer = wx.PyTimer(self.Notify) self.timer.Start(1000, wx.TIMER_CONTINUOUS) self.Notify() #處理事件 def Onclick(self,event): if event.GetEventObject()==self._submit_btn: dlg=LoginDiglog(None,-1) dlg.ShowModal() dlg.Destroy() #實時顯示時間 def Notify(self): t=time.localtime(time.time()) st=time.strftime('%Y-%m-%d %H:%M:%S',t) self.SetStatusText(st,1)#這裏的1表明將時間放入狀態欄的第二部分上 def InitButton(self): # 顯示按鈕功能 self.panel=wx.Panel(self,-1) wx.StaticText(self.panel,label="Username",pos=(20,20)) wx.StaticText(self.panel, label="Password", pos=(20, 50)) self._username=wx.TextCtrl(self.panel,pos=(85,15)) self._passwd = wx.TextCtrl(self.panel, pos=(85, 45),style=wx.TE_PASSWORD) self._submit_btn=wx.Button(self.panel,label=u'提交',pos=(20,80),size=(50,30)) self.panel.Bind(wx.EVT_BUTTON,self.Onclick,self._submit_btn) def GetUsername(self): return self._username.GetValue() def GetPasswd(self): return self._passwd.GetValue() def InitMenu(self): # 主菜單 menubar = wx.MenuBar() # 子菜單:退出(Quit) fmennu = wx.Menu() fmennu.Append(ID_EXIT, u'退出(&Q)', 'Terminate thr program') menubar.Append(fmennu, u'文件(&F)') # 將子菜單添加到文件(File)中 # 子菜單:關於(About) hmenu = wx.Menu() hmenu.Append(ID_ABOUT, u'關於(&A)', 'More information about this program') menubar.Append(hmenu, u'幫助(&H)') # 將子菜單添加到幫助(Help)中 self.SetMenuBar(menubar) # 綁定子菜單 wx.EVT_MENU(self, ID_EXIT, self.OnMenuExit) wx.EVT_MENU(self, ID_ABOUT, self.OnMenuAbout) wx.EVT_CLOSE(self, self.OnCloseWindow) def OnMenuExit(self,event): self.Close() def OnMenuAbout(self,event): dlg=AboutDialog(None,-1) dlg.ShowModal() dlg.Destroy() def OnCloseWindow(self,event): self.Destroy() class LoginDiglog(wx.Dialog): def __init__(self,parent,id): # super(LoginDiglog,self).__init__(parent,id,u"顯示",size=(200,200)) wx.Dialog.__init__(self, parent, id, '顯示', size=(200, 200)) self.app=wx.GetApp() self.panel=self.app.frame self._username_dlg=wx.StaticText(self,label=u'用戶名:'+self.GetUsername(),pos=(20,20)) self._passwd_dlg=wx.StaticText(self,label=u'密碼:'+self.GetPasswd(),pos=(20,50)) wx.Button(self,wx.ID_OK,pos=(20,80)) def GetUsername(self): return self.panel.GetUsername() def GetPasswd(self): return self.panel.GetPasswd() class AboutDialog(wx.Dialog): def __init__(self,parent,id): wx.Dialog.__init__(self,parent,id,'About Me',size=(200,200)) #BoxSizer爲一個盒子,wx.VERTICAL self.sizer1=wx.BoxSizer(wx.VERTICAL) self.sizer1.Add(wx.StaticText(self,-1,u'wxPython初級教程'),0,wx.ALIGN_CENTER_HORIZONTAL|wx.TOP,border=20) self.sizer1.Add(wx.StaticText(self, -1, u'wxPython初級教程'), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.TOP, border=10) self.sizer1.Add(wx.StaticText(self, -1, u'wxPython初級教程'), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.TOP, border=10) self.sizer1.Add(wx.StaticText(self, -1, u'wxPython初級教程'), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.TOP, border=10) self.sizer1.Add(wx.Button(self,wx.ID_OK),0,wx.ALIGN_CENTER|wx.BOTTOM,border=20) self.SetSizer(self.sizer1) class App(wx.App): #5 wx.App子類 def __init__(self): #若是要重寫__init__,必須調用wx.App的__init__,不然OnInit方法不會被調用 wx.App.__init__(self) def OnInit(self): self.frame=Frame() self.SetTopWindow(self.frame) self.frame.Show() return True if __name__=="__main__": app = App() app.MainLoop()