wxpython笔记:Wxpython入门

Wxpython入门

 

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