zoukankan      html  css  js  c++  java
  • wxpython笔记:Wxpython入门

    Wxpython入门

    api文档以及中文教程:

    https://pan.baidu.com/s/1TDTgHg9Mwc74ODQy68YnlQ

    提取码:354n

    入门示例

    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程序所必须的五个基本步骤:
    1、导入必须的wxPython包     
    2、子类化wxPython应用程序类     
    3、定义一个应用程序的初始化方法     
    4、创建一个应用程序类的实例     
    5、进入这个应用程序的主事件循环

      

    导入wxPython

    你需要做的第一件事就是导入这个主要的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()
  • 相关阅读:
    设计模式之策略模式
    设计模式之简单工厂模式
    UML 之关系
    C# delegate (001)
    转: 编写高质量代码改善C#程序的157个建议
    通过配置数据库邮件实现发送邮件
    存储过程学习(004)--象写程序一样的写存储过程及调试
    存储过程学习(003)--象写程序一样的写存储过程及调试
    存储过程学习(002)--循环插入数据
    jQ新的事件绑定方法on()
  • 原文地址:https://www.cnblogs.com/-wenli/p/10661680.html
Copyright © 2011-2022 走看看