Wxpython入门

api文档以及中文教程:

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

提取码:354n

入门示例

  1. import wx#
  2.  
  3. class App(wx.App):#
  4. def OnInit(self):#
  5. frame=wx.Frame(parent=None,title ='Bare')
  6. frame.Show()
  7. return True
  8. if __name__=="__main__":
  9. app = App(0)#
  10. app.MainLoop()#
  1. 上面的代码的任何一行都不能少,否则将不能工作。这个基本的wxPython 程序说明了开发任一wxPython程序所必须的五个基本步骤:
    1、导入必须的wxPython     
    2、子类化wxPython应用程序类     
    3、定义一个应用程序的初始化方法     
    4、创建一个应用程序类的实例     
    5、进入这个应用程序的主事件循环

  

导入wxPython

  1. 你需要做的第一件事就是导入这个主要的wxPython包,这个包名为wx:
  2. import wx
  3. 一旦这个包被导入,你就可以引用wxPython的类、函数和常量(它们以wx 为前缀)。

分析

使用应用程序和框架工作

  1. 一旦你导入了wx模块,你就能够创建你的应用程序(application)对象和 框架(frame)对象。每个wxPython程序必须有一个application对象和至少一个 frame对象。application对象必须是wx.App的一个实例或你在OnInit()方法中定义 的一个子类的一个实例。当你的应用程序启动的时候,OnInit()方法将被 wx.App父类调用。
  2. 子类化wxPython application
  3. 下面的代码演示了如何定义我们的wx.App的子类:
  4. class MyApp(wx.App):
  5. def OnInit(self):
  6. frame = wx.Frame(parent=None, id=-1, title=”Bare”)
  7. frame.Show()
  8. return True
  9. 上面我们定义了一个名为MyApp的子类。我们通常在OnInit()方法中创建 frame对象。上面的wx.Frame接受三个参数,仅第一个是必须的,其余的都有默 认值。 调用Show()方法使frame可见,否则不可见。我们可以通过给Show()一个布 尔值参数来设定frame的可见性:
  10. frame.Show(False) # 使框架不可见.
  11. frame.Show(True) # True是默认值,使框架可见.
  12. frame.Hide() # 等同于frame.Show(False)
  13. 定义一个应用程序的初始化方法
  14. 注意:我们没有为我们的应用程序类定义一个__init__()方法。在Python中,这就意 味着父方法wx.App.__init()__将在对象创建时被自动调用。这是一个好的事情。如果 你定义你自己的__init__()方法,不要忘了调用其基类的__init()__方法,示例如下:
  15. class App(wx.App):
  16. def __init__(self):
  17. wx.App.__init__(self)
  18. 如果你忘了这样做,wxPython不将被初始化并且你的OnInit()方法也不将得到调用。
  19. 创建一个应用程序实例并进入它的主事件循环
  20. 这步是创建wx.App子类的实例,并调用它的MainLoop()方法:
  21. app = App()
  22. app.MainLoop()
  23. 一旦进入主事件循环,控制权将转交给wxPythonwxPython GUI程序主要 响应用户的鼠标和键盘事件。当一个应用程序的所有框架被关闭后,这个 app.MainLoop()方法将返回且程序退出。

分析

 扩展入门示例

  1. #!/usr/bin/env python   #1
  2. '''Spare.py is a starting point for a wxPython program.''' #
  3.  
  4. import wx#
  5.  
  6. class Frame(wx.Frame):#3     
  7. pass
  8. class App(wx.App):#
  9. def OnInit(self):#
  10. self.frame=wx.Frame(parent=None,title ='Spare')#
  11. self.SetTopWindow(self.frame)#
  12. self.frame.Show()
  13. return True
  14. if __name__=="__main__":#
  15. app = App(0)
  16. app.MainLoop()
  1. #1 这行看似注释,但是在如linux和unix等操作系统上,它告诉操作系统如 何找到执行程序的解释器。如果这个程序被给予的可执行权限(例如使用 chmod命令),我们可以在命令行下仅仅键入该程序的名字来运行这个程序:
  2. % spare.py
  3. 这行在其它的操作系统上将被忽略。但是包含它可以实现代码的跨平台。
  4.  
  5. #2 这是文档字符串,当模块中的第一句是字符串的时候,这个字符串就成 了该模块的文档字符串并存储在该模块的__doc__属性中。你能够在你的代码 中、某些开发平台、甚至交互模式下运行的Python解释器中访问文档字符串:
  6. >>> import spare
  7. >>> print spare.__doc__
  8. Spare.py is a starting point for simple wxPython programs.
  9. >>>
  10. #3 我们改变了你们创建frame对象的方法。bare版的程序简单地创建了一个 wx.Frame类的实例。在spare版中,我们定义了我们自己的Frame类作为 wx.Frame的子类。此时,最终的结果没有什么不同,但是如果你想在你的框架 中显示诸如文本、按钮、菜单的话,你可能就想要你自己的Frame类了。
  11.  
  12. #4 我们将对frame实例的引用作为应用程序实例的一个属性。
  13.  
  14. #5 在OnInit()方法中,我们调用了这个App类自己的SetTopWindow()方法, 并传递给它我们新创建的frame实例。我们不必定义SetTopWindow()方法,因为 它继承自wx.App父类。SetTopWindow()方法是一个可选的方法,它让wxPython 方法知道哪个框架或对话框将被认为是主要的。一个wxPython程序可以有几个 框架,其中有一个是被设计为应用程序的顶级窗口的。
  15.  
  16. #6 这个是Python中通常用来测试该模块是作为程序独立运行还是被另一模 块所导入。我们通过检查该模块的__name__属性来实现:
  17. if __name__ == __main__’:
  18. app = App()
  19. app.MainLoop()

分析

显示图像的例子

  1. #!/usr/bin/env python   
  2.  
  3. import wx
  4.  
  5. class Frame(wx.Frame): #2 wx.Frame子类
  6. # 3图像参数
  7. def __init__(self,image,parent = None,id = -1,pos = wx.DefaultPosition,title ='Hello, wxPython!'):
  8. # 4 显示图像
  9. temp=image.ConvertToBitmap()
  10. size=temp.GetWidth(),temp.GetHeight()
  11. wx.Frame.__init__(self,parent,id,title,pos,size)
  12. self.bmp=wx.StaticBitmap(parent=self,bitmap =temp)
  13.  
  14. class App(wx.App): #5 wx.App子类 
  15. # 6 图像处理 
  16. def OnInit(self):
  17. image=wx.Image('back1.jpg',wx.BITMAP_TYPE_JPEG)
  18. self.frame=wx.Frame(image)
  19. self.frame.Show()
  20. self.SetTopWindow(self.frame)
  21.  
  22. return True
  23. if __name__=="__main__": #7        
  24. app = App(0)
  25. app.MainLoop()
  1. 说明:
  2. #2 定义一个wx.Frame的子类,以便我们更容量控制框架的内容和外观。
  3. #3 给我们的框架的构造器增加一个图像参数。这个值通过我们的应用程序 类在创建一个框架的实例时提供。同样,我们可以传递必要的值 wx.Frame.__init__()
  4. #4 我们将用wx.StaticBitmap控件来显示这个图像,它要求一个位图。所以 我们转换图像到位图。我们也使用图像的宽度和高度创建一个size元组。这个 size元组被提供给wx.Frame.__init__()调用,以便于框架的尺寸匹配位图尺寸。
  5. #5 定义一个带有OnInit()方法的wx.App的子类,这是wxPython应用程序最 基本的要求。
  6. #6 我们使用与hello.py在同一目录下的名为back1.jpg的文件创建了一个 图像对象。 
  7. #7 main()函数创建一个应用程序的实例并启动wxPython的事件循环。

按钮功能的实现

  1. #!/usr/bin/env python   
  2.  
  3. import wx
  4.  
  5. class Frame(wx.Frame): #2 wx.Frame子类
  6.  
  7. def __init__(self,parent = None,id = -1,title ='wxPython!'):
  8. wx.Frame.__init__(self,parent,id,title,size=(500,500))
  9.  
  10. #显示按钮
  11. self.buttonOK=wx.Button(self,-1,u'ok',(20,20),(60,30))
  12. self.Bind(wx.EVT_BUTTON,self.Onclick,self.buttonOK)
  13.  
  14. self.buttonCancel=wx.Button(self,-1,u'cancel',(20,80),(60,30))
  15. self.Bind(wx.EVT_BUTTON, self.Onclick,self.buttonCancel)
  16.  
  17. #处理事件
  18. def Onclick(self,event):
  19. if event.GetEventObject()==self.buttonOK:
  20. print("{}".format(event.GetEventObject().GetLabel()))
  21. elif event.GetEventObject()==self.buttonCancel:
  22. print("{}".format(event.GetEventObject().GetLabel()))
  23.  
  24. class App(wx.App): #5 wx.App子类 
  25. def __init__(self):
  26. #如果要重写__init__,必须调用wx.App的__init__,否则OnInit方法不会被调用
  27. wx.App.__init__(self)
  28. def OnInit(self):
  29.  
  30. self.frame=Frame()
  31. self.SetTopWindow(self.frame)
  32. self.frame.Show()
  33.  
  34. return True
  35. if __name__=="__main__":
  36. app = App()
  37. app.MainLoop()

状态栏实现

  1. #!/usr/bin/env python   
  2.  
  3. import wx,time
  4.  
  5. class Frame(wx.Frame): #2 wx.Frame子类
  6.  
  7. def __init__(self,parent = None,id = -1,title ='wxPython!'):
  8. wx.Frame.__init__(self,parent,id,title,size=(500,500))
  9.  
  10. self.setupStatusBar()
  11. #显示按钮功能
  12. self.buttonOK=wx.Button(self,-1,u'ok',(20,20),(60,30))
  13. self.Bind(wx.EVT_BUTTON,self.Onclick,self.buttonOK)
  14. self.buttonCancel=wx.Button(self,-1,u'cancel',(20,80),(60,30))
  15. self.Bind(wx.EVT_BUTTON, self.Onclick,self.buttonCancel)
  16.  
  17. #设置状态栏
  18. def setupStatusBar(self):
  19. # 状态栏
  20. sb = self.CreateStatusBar(2) # 2代表将状态栏分为两个
  21. self.SetStatusWidths([-1, -2]) # 比例为1:2
  22. self.SetStatusText("Ready", 0) # 0代表第一个栏,Ready为内容
  23.  
  24. # timmer
  25. self.timer = wx.PyTimer(self.Notify)
  26. self.timer.Start(1000, wx.TIMER_CONTINUOUS)
  27. self.Notify()
  28. #处理事件
  29. def Onclick(self,event):
  30. if event.GetEventObject()==self.buttonOK:
  31. print("{}".format(event.GetEventObject().GetLabel()))
  32. elif event.GetEventObject()==self.buttonCancel:
  33. print("{}".format(event.GetEventObject().GetLabel()))
  34.  
  35. #实时显示时间
  36. def Notify(self):
  37. t=time.localtime(time.time())
  38. st=time.strftime('%Y-%m-%d %H:%M:%S',t)
  39. self.SetStatusText(st,1)#这里的1代表将时间放入状态栏的第二部分上
  40.  
  41. class App(wx.App): #5 wx.App子类 
  42. def __init__(self):
  43. #如果要重写__init__,必须调用wx.App的__init__,否则OnInit方法不会被调用
  44. wx.App.__init__(self)
  45. def OnInit(self):
  46.  
  47. self.frame=Frame()
  48. self.SetTopWindow(self.frame)
  49. self.frame.Show()
  50.  
  51. return True
  52. if __name__=="__main__":
  53. app = App()
  54. app.MainLoop()

菜单栏实现

  1. #!/usr/bin/env python   
  2.  
  3. import wx,time
  4. ID_EXIT=200
  5. ID_ABOUT=201
  6.  
  7. class Frame(wx.Frame): #2 wx.Frame子类
  8.  
  9. def __init__(self,parent = None,id = -1,title ='wxPython!'):
  10. wx.Frame.__init__(self,parent,id,title,size=(500,500))
  11.  
  12. self.setupStatusBar()
  13. self.InitButton()
  14. self.InitMenu()
  15.  
  16. #设置状态栏
  17. def setupStatusBar(self):
  18. # 状态栏
  19. sb = self.CreateStatusBar(2) # 2代表将状态栏分为两个
  20. self.SetStatusWidths([-1, -2]) # 比例为1:2
  21. self.SetStatusText("Ready", 0) # 0代表第一个栏,Ready为内容
  22.  
  23. # timmer
  24. self.timer = wx.PyTimer(self.Notify)
  25. self.timer.Start(1000, wx.TIMER_CONTINUOUS)
  26. self.Notify()
  27. #处理事件
  28. def Onclick(self,event):
  29. if event.GetEventObject()==self.buttonOK:
  30. print("{}".format(event.GetEventObject().GetLabel()))
  31. elif event.GetEventObject()==self.buttonCancel:
  32. print("{}".format(event.GetEventObject().GetLabel()))
  33.  
  34. #实时显示时间
  35. def Notify(self):
  36. t=time.localtime(time.time())
  37. st=time.strftime('%Y-%m-%d %H:%M:%S',t)
  38. self.SetStatusText(st,1)#这里的1代表将时间放入状态栏的第二部分上
  39.  
  40. def InitButton(self):
  41. # 显示按钮功能
  42. self.buttonOK = wx.Button(self, -1, u'ok', (20, 20), (60, 30))
  43. self.Bind(wx.EVT_BUTTON, self.Onclick, self.buttonOK)
  44. self.buttonCancel = wx.Button(self, -1, u'cancel', (20, 80), (60, 30))
  45. self.Bind(wx.EVT_BUTTON, self.Onclick, self.buttonCancel)
  46.  
  47. def InitMenu(self):
  48. # 主菜单
  49. menubar = wx.MenuBar()
  50.  
  51. # 子菜单:退出(Quit)
  52. fmennu = wx.Menu()
  53. fmennu.Append(ID_EXIT, u'退出(&Q)', 'Terminate thr program')
  54. menubar.Append(fmennu, u'文件(&F)') # 将子菜单添加到文件(File)中
  55.  
  56. # 子菜单:关于(About)
  57. hmenu = wx.Menu()
  58. hmenu.Append(ID_ABOUT, u'关于(&A)', 'More information about this program')
  59. menubar.Append(hmenu, u'帮助(&H)') # 将子菜单添加到帮助(Help)中
  60.  
  61. self.SetMenuBar(menubar)
  62.  
  63. # 绑定子菜单
  64. wx.EVT_MENU(self, ID_EXIT, self.OnMenuExit)
  65. wx.EVT_MENU(self, ID_ABOUT, self.OnMenuAbout)
  66. wx.EVT_CLOSE(self, self.OnCloseWindow)
  67.  
  68. def OnMenuExit(self,event):
  69. self.Close()
  70. def OnMenuAbout(self,event):
  71. dlg=AboutDialog(None,-1)
  72. dlg.ShowModal()
  73. dlg.Destroy()
  74. def OnCloseWindow(self,event):
  75. self.Destroy()
  76.  
  77. class AboutDialog(wx.Dialog):
  78. def __init__(self,parent,id):
  79. wx.Dialog.__init__(self,parent,id,'About Me',size=(200,200))
  80.  
  81. #BoxSizer为一个盒子,wx.VERTICAL
  82. self.sizer1=wx.BoxSizer(wx.VERTICAL)
  83. self.sizer1.Add(wx.StaticText(self,-1,u'wxPython初级教程'),0,wx.ALIGN_CENTER_HORIZONTAL|wx.TOP,border=20)
  84. self.sizer1.Add(wx.StaticText(self, -1, u'wxPython初级教程'), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.TOP, border=10)
  85. self.sizer1.Add(wx.StaticText(self, -1, u'wxPython初级教程'), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.TOP, border=10)
  86. self.sizer1.Add(wx.StaticText(self, -1, u'wxPython初级教程'), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.TOP, border=10)
  87. self.sizer1.Add(wx.Button(self,wx.ID_OK),0,wx.ALIGN_CENTER|wx.BOTTOM,border=20)
  88. self.SetSizer(self.sizer1)
  89. class App(wx.App): #5 wx.App子类 
  90. def __init__(self):
  91. #如果要重写__init__,必须调用wx.App的__init__,否则OnInit方法不会被调用
  92. wx.App.__init__(self)
  93. def OnInit(self):
  94.  
  95. self.frame=Frame()
  96. self.SetTopWindow(self.frame)
  97. self.frame.Show()
  98.  
  99. return True
  100. if __name__=="__main__":
  101. app = App()
  102. app.MainLoop()
  1. import wx
  2.  
  3. # 自定义窗口类MyFrame
  4. class MyFrame(wx.Frame):
  5. def __init__(self):
  6. super().__init__(parent=None, title="菜单", size=(400, 300))
  7. self.Center() #窗口居中
  8. self.text = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE) #创建一个多行文本控件
  9. vbox = wx.BoxSizer(wx.VERTICAL) #创建一个垂直布局管理器
  10. self.SetSizer(vbox)#为此窗口添加此布局管理器
  11. vbox.Add(self.text, 1, flag=wx.EXPAND | wx.ALL, border=1) #将文本添加进当前窗口
  12.  
  13. menubar = wx.MenuBar() # 创建一个菜单栏,
  14. self.SetMenuBar(menubar) # 给窗口添加此菜单栏
  15. file_menu = wx.Menu() # 创建一个菜单
  16. menubar.Append(file_menu, 'File') # 在菜单栏上添加此菜单
  17.  
  18. file_menu.Append(id=wx.ID_NEW, item='New', helpString='new file') # 往菜单中添加一个菜单项
  19. self.Bind(wx.EVT_MENU, self.on_newitem_click, id=wx.ID_NEW) # 为此菜单项添加事件处理
  20. file_menu.AppendSeparator() # 分割线
  21.  
  22. edit_menu = wx.Menu() # 创建一个edit_menu菜单
  23. file_menu.AppendSubMenu(edit_menu, "Edit") # file_menu上面添加edit_menu菜单
  24. copy_item = wx.MenuItem(edit_menu, 100, text="Copy", kind=wx.ITEM_NORMAL) # 创建copy_item菜单项
  25. edit_menu.Append(copy_item) # edit_menu菜单添加copy_item菜单项
  26.  
  27. cut_item = wx.MenuItem(edit_menu, 101, text="Cut", kind=wx.ITEM_NORMAL) # 创建cut_item菜单项
  28. edit_menu.Append(cut_item) # edit_menu菜单添加cut_item菜单项
  29.  
  30. paste_item = wx.MenuItem(edit_menu, 102, text="Paste", kind=wx.ITEM_NORMAL) # 创建paste_item菜单项
  31. edit_menu.Append(paste_item) # edit_menu菜单添加paste_item菜单项
  32. self.Bind(wx.EVT_MENU, self.on_editmenu_click, id=100, id2=102) # 为这3个添加事件处理
  33.  
  34. def on_newitem_click(self, event):
  35. self.text.SetLabel('单击【New】菜单')
  36.  
  37. def on_editmenu_click(self, event):
  38. event_id = event.GetId()
  39. if event_id == 100:
  40. self.text.SetLabel('单击【Copy】菜单')
  41. elif event_id == 101:
  42. self.text.SetLabel('单击【Cut】菜单')
  43. else:
  44. self.text.SetLabel('单击【Paste】菜单')
  45.  
  46. class App(wx.App):
  47. def OnInit(self):
  48. # 创建窗口对象
  49. frame = MyFrame()
  50. frame.Show()
  51. return True
  52.  
  53. def OnExit(self):
  54. print("quit")
  55. return 0
  56.  
  57. if __name__ == '__main__':
  58. app = App()
  59. app.MainLoop()

参考示例

  1. 创建菜单栏:wxMenuBar()
  2. 创建菜单:wx.Menu()
  3. 创建菜单项:wx.MenuItem(parentMenu,id,text)
  4. 添加子菜单:menu.AppendSubMenu(subMenu,text)
  5. 添加菜单项:menu.Append(menuItem)

工具栏实现

  1. import wx
  2.  
  3. # 自定义窗口类MyFrame
  4. class MyFrame(wx.Frame):
  5. def __init__(self):
  6. super().__init__(parent=None, title="菜单栏和工具栏", size=(500, 400))
  7. self.Center() #窗口居中
  8. self.text = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE) #创建一个多行文本控件
  9. vbox = wx.BoxSizer(wx.VERTICAL) #创建一个垂直布局管理器
  10. self.SetSizer(vbox)#为此窗口添加此布局管理器
  11. vbox.Add(self.text, 1, flag=wx.EXPAND | wx.ALL, border=1) #将文本添加进当前窗口
  12.  
  13. menubar = wx.MenuBar() # 创建一个菜单栏,
  14. self.SetMenuBar(menubar) # 给窗口添加此菜单栏
  15. file_menu = wx.Menu() # 创建一个菜单
  16. menubar.Append(file_menu, 'File') # 在菜单栏上添加此菜单
  17.  
  18. file_menu.Append(id=wx.ID_NEW, item='New', helpString='new file') # 往菜单中添加一个菜单项
  19. self.Bind(wx.EVT_MENU, self.on_newitem_click, id=wx.ID_NEW) # 为此菜单项添加事件处理
  20. file_menu.AppendSeparator() # 分割线
  21.  
  22. edit_menu = wx.Menu() # 创建一个edit_menu菜单
  23. file_menu.AppendSubMenu(edit_menu, "Edit") # file_menu上面添加edit_menu菜单
  24. copy_item = wx.MenuItem(edit_menu, 100, text="Copy", kind=wx.ITEM_NORMAL) # 创建copy_item菜单项
  25. edit_menu.Append(copy_item) # edit_menu菜单添加copy_item菜单项
  26.  
  27. cut_item = wx.MenuItem(edit_menu, 101, text="Cut", kind=wx.ITEM_NORMAL) # 创建cut_item菜单项
  28. edit_menu.Append(cut_item) # edit_menu菜单添加cut_item菜单项
  29.  
  30. paste_item = wx.MenuItem(edit_menu, 102, text="Paste", kind=wx.ITEM_NORMAL) # 创建paste_item菜单项
  31. edit_menu.Append(paste_item) # edit_menu菜单添加paste_item菜单项
  32. self.Bind(wx.EVT_MENU, self.on_editmenu_click, id=100, id2=102) # 为这3个添加事件处理
  33.  
  34. #工具栏
  35. tb=wx.ToolBar(self,wx.ID_ANY) #创建工具栏对象
  36. self.ToolBar=tb #将此工具栏对象放入当前窗口
  37. #设置工具栏图标大小
  38. tsize=(30,30)
  39. #创建4个Bitmap图标
  40. new_bmp=wx.ArtProvider.GetBitmap(wx.ART_NEW,wx.ART_TOOLBAR,tsize)
  41. open_bmp = wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN, wx.ART_TOOLBAR, tsize)
  42. copy_bmp = wx.ArtProvider.GetBitmap(wx.ART_COPY, wx.ART_TOOLBAR, tsize)
  43. paste_bmp = wx.ArtProvider.GetBitmap(wx.ART_PASTE, wx.ART_TOOLBAR, tsize)
  44. #将这4个图标放入工具栏
  45. tb.AddTool(200,'new',new_bmp,'New')
  46. tb.AddTool(201, 'open', open_bmp, 'Open')
  47. tb.AddTool(202, 'copy', copy_bmp, 'Copy')
  48. tb.AddTool(203, 'paste', paste_bmp, 'Paste')
  49. #分割
  50. tb.AddSeparator()
  51. #放入2个自己提供的图标
  52. tb.AddTool(204, 'back',wx.Bitmap('icon/back.png'), 'back')
  53. tb.AddTool(205, 'forward', wx.Bitmap('icon/forward.png'), 'Forword')
  54. #为这6个图标绑定事件处理
  55. self.Bind(wx.EVT_MENU,self.on_click_tool,id=200,id2=205)
  56.  
  57. tb.Realize() #提交工具栏设置
  58.  
  59. #为New菜单项添加事件处理
  60. def on_newitem_click(self, event):
  61. self.text.SetLabel('新建')
  62. #为Copy,Cut,Paste菜单项添加事件处理
  63. def on_editmenu_click(self, event):
  64. event_id = event.GetId()
  65. if event_id == 100:
  66. self.text.SetLabel('复制')
  67. elif event_id == 101:
  68. self.text.SetLabel('剪切')
  69. else:
  70. self.text.SetLabel('粘贴')
  71. #为工具栏的图标添加事件处理
  72. def on_click_tool(self,event):
  73. event_id=event.GetId()
  74. if event_id==200:
  75. self.text.SetLabel('新建')
  76. elif event_id==201:
  77. self.text.SetLabel('打开')
  78. elif event_id==202:
  79. self.text.SetLabel('复制')
  80. elif event_id==203:
  81. self.text.SetLabel('粘贴')
  82. elif event_id==204:
  83. self.text.SetLabel('后退')
  84. else:
  85. self.text.SetLabel('前进')
  86. class App(wx.App):
  87. def OnInit(self):
  88. # 创建窗口对象
  89. frame = MyFrame()
  90. frame.Show()
  91. return True
  92.  
  93. def OnExit(self):
  94. print("quit")
  95. return 0
  96.  
  97. if __name__ == '__main__':
  98. app = App()
  99. app.MainLoop()

登陆框实现

  1. #!/usr/bin/env python   
  2.  
  3. '''
  4. 静态文本、可控文本、对话框、GetApp()
  5. '''
  6.  
  7. import wx,time
  8. ID_EXIT=200
  9. ID_ABOUT=201
  10.  
  11. class Frame(wx.Frame): #2 wx.Frame子类
  12.  
  13. def __init__(self,parent = None,id = -1,title ='wxPython!'):
  14. wx.Frame.__init__(self,parent,id,title,size=(500,500))
  15.  
  16. self.setupStatusBar()
  17. self.InitButton()
  18. self.InitMenu()
  19.  
  20. #设置状态栏
  21. def setupStatusBar(self):
  22. # 状态栏
  23. sb = self.CreateStatusBar(2) # 2代表将状态栏分为两个
  24. self.SetStatusWidths([-1, -2]) # 比例为1:2
  25. self.SetStatusText("Ready", 0) # 0代表第一个栏,Ready为内容
  26.  
  27. # timmer
  28. self.timer = wx.PyTimer(self.Notify)
  29. self.timer.Start(1000, wx.TIMER_CONTINUOUS)
  30. self.Notify()
  31. #处理事件
  32. def Onclick(self,event):
  33. if event.GetEventObject()==self._submit_btn:
  34. dlg=LoginDiglog(None,-1)
  35. dlg.ShowModal()
  36. dlg.Destroy()
  37.  
  38. #实时显示时间
  39. def Notify(self):
  40. t=time.localtime(time.time())
  41. st=time.strftime('%Y-%m-%d %H:%M:%S',t)
  42. self.SetStatusText(st,1)#这里的1代表将时间放入状态栏的第二部分上
  43.  
  44. def InitButton(self):
  45. # 显示按钮功能
  46. self.panel=wx.Panel(self,-1)
  47. wx.StaticText(self.panel,label="Username",pos=(20,20))
  48. wx.StaticText(self.panel, label="Password", pos=(20, 50))
  49. self._username=wx.TextCtrl(self.panel,pos=(85,15))
  50. self._passwd = wx.TextCtrl(self.panel, pos=(85, 45),style=wx.TE_PASSWORD)
  51. self._submit_btn=wx.Button(self.panel,label=u'提交',pos=(20,80),size=(50,30))
  52. self.panel.Bind(wx.EVT_BUTTON,self.Onclick,self._submit_btn)
  53. def GetUsername(self):
  54. return self._username.GetValue()
  55. def GetPasswd(self):
  56. return self._passwd.GetValue()
  57.  
  58. def InitMenu(self):
  59. # 主菜单
  60. menubar = wx.MenuBar()
  61.  
  62. # 子菜单:退出(Quit)
  63. fmennu = wx.Menu()
  64. fmennu.Append(ID_EXIT, u'退出(&Q)', 'Terminate thr program')
  65. menubar.Append(fmennu, u'文件(&F)') # 将子菜单添加到文件(File)中
  66.  
  67. # 子菜单:关于(About)
  68. hmenu = wx.Menu()
  69. hmenu.Append(ID_ABOUT, u'关于(&A)', 'More information about this program')
  70. menubar.Append(hmenu, u'帮助(&H)') # 将子菜单添加到帮助(Help)中
  71.  
  72. self.SetMenuBar(menubar)
  73.  
  74. # 绑定子菜单
  75. wx.EVT_MENU(self, ID_EXIT, self.OnMenuExit)
  76. wx.EVT_MENU(self, ID_ABOUT, self.OnMenuAbout)
  77. wx.EVT_CLOSE(self, self.OnCloseWindow)
  78.  
  79. def OnMenuExit(self,event):
  80. self.Close()
  81. def OnMenuAbout(self,event):
  82. dlg=AboutDialog(None,-1)
  83. dlg.ShowModal()
  84. dlg.Destroy()
  85. def OnCloseWindow(self,event):
  86. self.Destroy()
  87. class LoginDiglog(wx.Dialog):
  88. def __init__(self,parent,id):
  89. # super(LoginDiglog,self).__init__(parent,id,u"显示",size=(200,200))
  90. wx.Dialog.__init__(self, parent, id, '显示', size=(200, 200))
  91. self.app=wx.GetApp()
  92.  
  93. self.panel=self.app.frame
  94.  
  95. self._username_dlg=wx.StaticText(self,label=u'用户名:'+self.GetUsername(),pos=(20,20))
  96. self._passwd_dlg=wx.StaticText(self,label=u'密码:'+self.GetPasswd(),pos=(20,50))
  97. wx.Button(self,wx.ID_OK,pos=(20,80))
  98. def GetUsername(self):
  99. return self.panel.GetUsername()
  100. def GetPasswd(self):
  101. return self.panel.GetPasswd()
  102.  
  103. class AboutDialog(wx.Dialog):
  104. def __init__(self,parent,id):
  105. wx.Dialog.__init__(self,parent,id,'About Me',size=(200,200))
  106.  
  107. #BoxSizer为一个盒子,wx.VERTICAL
  108. self.sizer1=wx.BoxSizer(wx.VERTICAL)
  109. self.sizer1.Add(wx.StaticText(self,-1,u'wxPython初级教程'),0,wx.ALIGN_CENTER_HORIZONTAL|wx.TOP,border=20)
  110. self.sizer1.Add(wx.StaticText(self, -1, u'wxPython初级教程'), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.TOP, border=10)
  111. self.sizer1.Add(wx.StaticText(self, -1, u'wxPython初级教程'), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.TOP, border=10)
  112. self.sizer1.Add(wx.StaticText(self, -1, u'wxPython初级教程'), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.TOP, border=10)
  113. self.sizer1.Add(wx.Button(self,wx.ID_OK),0,wx.ALIGN_CENTER|wx.BOTTOM,border=20)
  114. self.SetSizer(self.sizer1)
  115.  
  116. class App(wx.App): #5 wx.App子类 
  117. def __init__(self):
  118. #如果要重写__init__,必须调用wx.App的__init__,否则OnInit方法不会被调用
  119. wx.App.__init__(self)
  120. def OnInit(self):
  121.  
  122. self.frame=Frame()
  123. self.SetTopWindow(self.frame)
  124. self.frame.Show()
  125.  
  126. return True
  127. if __name__=="__main__":
  128. app = App()
  129. app.MainLoop()

Wxpython入门的更多相关文章

  1. wxPython 入门开发示例

    1.背景资料 wxPython API:https://www.wxpython.org/Phoenix/docs/html/ 2.入门示例 wxPython最重要的两个概念:App与Frame,其中 ...

  2. wxPython入门练习代码 二

    WxPython书籍[摘记] 1.任何wxPython应用程序都需要一个应用程序对象.这个应用程序对象必须是类wx.App或其定制的子类的一个实例.2.在OnInit()方法中将至少创建一个框架对象, ...

  3. wxPython入门练习代码 一

    Bare.py: #1.导入必须的wxPython包 import wx #2.子类化wx应用程序类 class App(wx.App): #3.定义应用程序初始化方法 def OnInit(self ...

  4. wxPython入门练习代码 四

    自定义Model文件abtractmodel.py: class AbstractModel(object): def __init__(self): self.listeners = [] def ...

  5. wxPython入门练习代码 三

    DoubleEventFrame.py: #!/usr/bin/env/ python import wx class DoubleEventFrame(wx.Frame): def __init__ ...

  6. wxPython中文教程入门实例

    这篇文章主要为大家分享下python编程中有关wxPython的中文教程,分享一些wxPython入门实例,有需要的朋友参考下     wxPython中文教程入门实例 wx.Window 是一个基类 ...

  7. 收集了一些python的文章

    来自: 戴铭 2010-08-31 17:52:31 newthreading - safer concurrency for Python 安全并发(1回应) http://www.starming ...

  8. 20192204 2019-2020-2 《Python程序设计》实验四报告

    20192204 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1922 姓名: 李龙威 学号:20192204 实验教师 ...

  9. wxPython简单入门

    wxPython简介 wxPython 是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的.功能键全的  GUI 用户界面. wxPython 是作为优秀 ...

随机推荐

  1. XUGUO-书呆子-搜索书箱

    WorldCat 上的 米塔斯 通过图书馆馆藏的全球目录WorldCat,在附近的图书馆中查找所要的资料. < 用 Sketch 创作 Airiti Library華藝線上圖書館 BookBub ...

  2. POJ--3349 Snowflake Snow Snowflakes(数字hash)

    链接:Snowflake Snow Snowflakes 判断所有的雪花里面有没有相同的 每次把雪花每个角的值进行相加和相乘 之后hash #include<iostream> #incl ...

  3. Springboot 5.Springboot 返回cookies信息的post接口开发

    首先创建一个类,类里面首先登陆获取到cookie,然后带着cookie去发送请求 package com.course.server; import com.course.bean.User; imp ...

  4. Web请求相关

    HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送 ...

  5. GDB disassemble

    前面几篇谈GDB调试程序的帖子,都对反汇编语焉不详.这里详细讨论一下disassemble/disass命令 反汇编一个函数disass func_name 反汇编一段内存地址, 第1个参数是起始地址 ...

  6. Sass学习第一天

    Sass学习 网站学习地址: Sass中文网:https://www.sass.hk/docs/#t7-3 Airen的博客:https://www.w3cplus.com/preprocessor/ ...

  7. tomcat无法正常关闭问题分析及解决

    问题描述 通常,我们都会直接使用tomcat提供的脚本执行关闭操作,如下: # sh bin/shutdown.sh Using CATALINA_BASE: /usr/local/apache-to ...

  8. SpringBoot之解决云服务器VPS在所处云端集群的内网不能解析域名的问题:java.net.UnknownHostException:abc.cn: Temporary failure in name resolution

    一.起因与原因分析过程 前端小伙伴儿告诉我,说服务器崩了. 请求数据接口,接口有响应,但报的json提示指向:数据库异常错误. 遂登陆云主机查看日志,核心记录显示如下: 2018-11-09 22:1 ...

  9. 大家都知道fastclick能解决300ms延迟,现在我们来看一下,使用方法

    1.在终端输入以下命令进行安装 npm install fastclick -S 2.在你用脚手架搭建好的项目中,找到mian.js这个入口文件,打开 3.在其中加入: import FastClic ...

  10. 解决只读时ios下input光标问题

    应用场景:在ios手机下对只读的input设置readonly=readonly属性还是会出现光标 解决方法: //解决ios日期光标问题 $("#Stime ,#provinceCity& ...