`
rainytooo
  • 浏览: 38955 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

The wxPython Guide笔记2

阅读更多
(二)Menus and Toolbars in wxPython
1    组成
    一个菜单是由wx.MenuBar,  wx.Menu 和  wx.MenuItem三个部分组成 wx.MenuBar是 wx.Menu的容器,wx.Menu是wx.MenuItem的容器
    一个简单示例

python 代码
 
  1. import wx  
  2.   
  3. #构造一个带菜单的窗口 继承wx.Frame  
  4. class SimpleMenu(wx.Frame):  
  5.     def __init__(self, parent, id, title):  
  6.     wx.Frame.__init__(self, parent, id, title, size=(250,250))  
  7. #构造一个MenuBar  
  8.     menubar=wx.MenuBar()  
  9. #构造一个Menu  
  10.     file=wx.Menu()  
  11. #给Menu添加一个MenuItem  
  12.     file.Append(-1,'Quit', 'Quit application')  
  13. #给MenuBar添加一个Menu 就是上面的file  
  14.     menubar.Append(file, '&File')  
  15. #让Frame加上这个menubar  
  16.     self.SetMenuBar(menubar)  
  17. #用继承自windows的方法来设置位置         
  18.     self.Centre()  
  19.     self.Show(True)  
  20.   
  21. app = wx.App()  
  22. SimpleMenu(None, -1, 'simple menu example')  
  23. app.MainLoop()  



2    Icons, shortcuts, events
    一个带图标的例子

python 代码
 
  1. import wx  
  2.   
  3. class MenuExample(wx.Frame):  
  4.     def __init__(self, parent, id, title):  
  5.     wx.Frame.__init__(self, parent, id, title, size=(250,150))  
  6.      
  7.     menubar = wx.MenuBar()  
  8.     file = wx.Menu()  
  9. #这里用了添加MenuItem的另一种方法 先添加一个MenuItem Object而不是直接在Menu上Append  
  10. #如果想添加图标就要自己手动的创建wx.MenuItem对象  
  11.     quit = wx.MenuItem(file, 1, '&Quit\tCtrl+q')  
  12. #设置图标的地址  
  13.     quit.SetBitmap(wx.Bitmap('icons/bp_btn2.png'))         
  14.     file.AppendItem(quit)  
  15. #添加一个事件         
  16.     self.Bind(wx.EVT_MENU, self.onQuit, id=1)  
  17.     menubar.Append(file, '&File')  
  18.     self.SetMenuBar(menubar)  
  19.      
  20.     self.Centre()  
  21.     self.Show(True)  
  22. #定义关闭按钮事件     
  23.     def onQuit(self, event):  
  24.     self.Close()  
  25.      
  26.      
  27. app = wx.App()  
  28. MenuExample(None, -1, '')  
  29. app.MainLoop()  


3    Submenus
    菜单下面的menuitem可以有子菜单 便于分类 还可以添加分隔符
    例子程序

python 代码
 
  1. import wx  
  2.   
  3.   
  4. ID_QUIT = 1  
  5.   
  6. class SubmenuExample(wx.Frame):  
  7.     def __init__(self, parent, id, title):  
  8.     wx.Frame.__init__(self, parent, id, title, size=(350,250))  
  9. #构造一个wx.MenuBar  
  10.     menubar = wx.MenuBar()  
  11. #构造一个wx.Menu 并添加wx.MeunItem 和一个分隔符         
  12.     file = wx.Menu()  
  13.     file.Append(-1, '&New')  
  14.     file.Append(-1, '&Open')  
  15.     file.Append(-1, '&Save')  
  16.     file.AppendSeparator()  
  17. #新构造一个wx.Menu  
  18.     imp = wx.Menu()  
  19.     imp.Append(-1, 'Import newsfeed list...')  
  20.     imp.Append(-1, 'Import bookmarks...')  
  21.     imp.Append(-1, 'Import mail...')  
  22. #把这个菜单作为file的子菜单添加进来 用 AppenMenu() 方法  
  23.     file.AppendMenu(-1, '&Import', imp)  
  24.     quit = wx.MenuItem(file, ID_QUIT, '&Quit\tCtrl+W')  
  25.     quit.SetBitmap(wx.Bitmap('icons/bp_btn2.png'))  
  26.     file.AppendItem(quit)  
  27.      
  28.     self.Bind(wx.EVT_MENU, self.OnQuit, id=ID_QUIT)  
  29.      
  30.     menubar.Append(file, '&File')  
  31.     self.SetMenuBar(menubar)  
  32.      
  33.     self.Centre()  
  34.     self.Show(True)  
  35.      
  36.     def OnQuit(self, event):  
  37.     self.Close()  
  38.      
  39. app = wx.App()  
  40. SubmenuExample(None, -1, 'Submenu')  
  41. app.MainLoop()  

       
4    Various menu items包含
        normal item
        check item
        radio item
    一个带有CheckItem的例子
 
python 代码
 
  1. import wx  
  2.   
  3.  ID_STAT = 1  
  4.  ID_TOOL = 2  
  5.   
  6.  class CheckMenuItem(wx.Frame):  
  7.      def __init__(self, parent, id, title):  
  8.      wx.Frame.__init__(self, parent, id, title, size=(350, 250))  
  9.           
  10.      menubar = wx.MenuBar()  
  11.      file = wx.Menu()  
  12.      view = wx.Menu()  
  13.  #在view这个Menu上加上两个check item id用在前面定义的ID_STAT和ID_TOOL  
  14.  #如果想定义为check类型的item就要在Append()后面加上一个参数kind=wx.ITEM_CHECK 默认的是wx.ITEM_NORMAL  
  15.  #Append返回的是一个wx.MeunItem  
  16.      self.shst = view.Append(ID_STAT, 'show statubar', 'Show StatuBar',  kind=wx.ITEM_CHECK)  
  17.      self.shtl = view.Append(ID_TOOL, 'show toolbar', 'Show ToolBar', kind=wx.ITEM_CHECK)  
  18.  #默认把这两项勾选上  
  19.      view.Check(ID_STAT, True)  
  20.      view.Check(ID_TOOL, True)  
  21.  #绑定这两个check item的事件函数  
  22.      self.Bind(wx.EVT_MENU, self.ToggleStatusBar, id=ID_STAT)  
  23.      self.Bind(wx.EVT_MENU, self.ToggleToolBar, id=ID_TOOL)  
  24.      menubar.Append(file, '&File')  
  25.      menubar.Append(view, '&View')  
  26.  #把这个menubar天到Frame上  
  27.      self.SetMenuBar(menubar)  
  28.   
  29.  #给Frame添加一个toolbar  
  30.      self.toolbar = self.CreateToolBar()  
  31.      self.toolbar.AddLabelTool(3, '', wx.Bitmap('icons/bp_btn2.png'))  
  32.  #给Frame添加一个statubar  
  33.      self.statusbar = self.CreateStatusBar()  
  34.           
  35.      self.Centre()  
  36.      self.Show(True)  
  37.  #定义StatusBar的check事件  
  38.      def ToggleStatusBar(self, event):   
  39.  #如果勾选了 就显示StatusBar  
  40.      if self.shst.IsChecked():  
  41.          self.statusbar.Show()  
  42.  #如果没有勾选 就隐藏StatusBar  
  43.      else:  
  44.          self.statusbar.Hide()  
  45.  #同样的定义toolbar的check事件  
  46.      def ToggleToolBar(self, event):  
  47.      if self.shtl.IsChecked():  
  48.          self.toolbar.Show()  
  49.      else:  
  50.          self.toolbar.Hide()  
  51.           
  52.  app = wx.App()  
  53.  CheckMenuItem(None, -1, 'check menu item')  
  54.  app.MainLoop()  

   

5    Context menu
    定义弹出式菜单 比如右键点击某个目标时候弹出的菜单
    一个实例程序

python 代码
 
  1. import wx  
  2. #创建一个分离的Menu class  
  3. class MyPopupMenu(wx.Menu):  
  4.     def __init__(self, parent):  
  5.   
  6.     wx.Menu.__init__(self)  
  7.      
  8.     self.parent = parent  
  9. #定义一个最小化窗口的item  
  10.     minimize = wx.MenuItem(self, wx.NewId(), 'Minimize')  
  11.     self.AppendItem(minimize)  
  12.     self.Bind(wx.EVT_MENU, self.OnMinimize, id=minimize.GetId())  
  13. #定义一个关闭窗口的item  
  14.     close = wx.MenuItem(self, wx.NewId(), 'Close')  
  15. #给Menu添加这个Close的Item 用的是AppendItem方法 因为是在Menu上添加,不是在MenuBar上添加  
  16.     self.AppendItem(close)  
  17.     self.Bind(wx.EVT_MENU, self.OnClose, id=close.GetId())  
  18. #最小化窗口         
  19.     def OnMinimize(self, event):             
  20.     self.parent.Iconize()  
  21. #关闭窗口     
  22.     def OnClose(self, event):  
  23.     self.parent.Close()  
  24.      
  25. class ContextMenu(wx.Frame):  
  26.     def __init__(self, parent, id, title):  
  27.     wx.Frame.__init__(self, parent, id, title, size=(250,150))  
  28. #出发弹出窗口的事件是wx.EVT_RIGHT_DOWN 调用   OnRightDown     
  29.     self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)  
  30.      
  31.     self.Centre()  
  32.     self.Show()  
  33.      
  34.     def OnRightDown(self, event):  
  35. #第一个参数是弹出的窗口 第二个参数是位置  
  36.     self.PopupMenu(MyPopupMenu(self), event.GetPosition())  
  37. app = wx.App()  
  38. frame = ContextMenu(None, -1, 'context menu')  
  39. app.MainLoop()  


6    Toolbars 快捷的工具栏
    参数表CreateToolBar(long style=-1, int winid=-1, String name=ToolBarNameStr)

python 代码
 
  1. #!/usr/bin/python  
  2.   
  3. # simpletoolbar.py  
  4.   
  5. import wx  
  6.   
  7. class SimpleToolbar(wx.Frame):  
  8.     def __init__(self, parent, id, title):  
  9.     wx.Frame.__init__(self, parent, id, title, size=(300, 200))  
  10.   
  11.     toolbar = self.CreateToolBar()  
  12.     #self.toolbar.AddLabelTool(wx.ID_EXIT, '', wx.Bitmap('icons/bp_btn2.png'))  
  13. #AddSimpleTool方法来创建一个tool 不知道为什么调用上面的方法不其作用  
  14.     toolbar.AddSimpleTool(wx.ID_EXIT, wx.Image('icons/bp_btn2.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  15. #添加tool完了以后 调用此方法 在linux上不需要  
  16.     toolbar.Realize()  
  17. #给这个tool添加事件处理  
  18.     self.Bind(wx.EVT_TOOL, self.OnExit, id=wx.ID_EXIT)  
  19.   
  20.     self.Centre()  
  21.     self.Show(True)  
  22. #定义这个tool bind的事件处理函数  
  23.     def OnExit(self, event):  
  24.     self.Close()  
  25.   
  26.   
  27. app = wx.App()  
  28. SimpleToolbar(None, -1, 'simple toolbar')  
  29. app.MainLoop()  


   
    另一个例子 两个toolbar

python 代码
 
  1. #!/usr/bin/python  
  2.   
  3. # toolbars.py  
  4.   
  5. import wx  
  6.   
  7. class Toolbars(wx.Frame):  
  8.     def __init__(self, parent, id, title):  
  9.     wx.Frame.__init__(self, parent, id, title, size=(300, 200))  
  10. #用一个BoxSizer容器来控制显示这两个toolbar  
  11.     vbox = wx.BoxSizer(wx.VERTICAL)  
  12.   
  13.     toolbar1 = wx.ToolBar(self, -1)  
  14.     toolbar1.AddSimpleTool(wx.ID_ANY, wx.Image('icons/book_red.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  15.     toolbar1.AddSimpleTool(wx.ID_ANY, wx.Image('icons/book_green.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  16.     toolbar1.AddSimpleTool(wx.ID_ANY, wx.Image('icons/process.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  17.     toolbar1.Realize()  
  18.   
  19.     toolbar2 = wx.ToolBar(self, -1)  
  20.     toolbar2.AddSimpleTool(wx.ID_EXIT, wx.Image('icons/customcontrol.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  21.     toolbar2.Realize()  
  22.   
  23.     vbox.Add(toolbar1, 0, wx.EXPAND)  
  24.     vbox.Add(toolbar2, 0, wx.EXPAND)  
  25.   
  26.     self.Bind(wx.EVT_TOOL, self.OnExit, id=wx.ID_EXIT)  
  27.   
  28.     self.SetSizer(vbox)  
  29.     self.Centre()  
  30.     self.Show(True)  
  31.   
  32.     def OnExit(self, event):  
  33.     self.Close()  
  34.   
  35.   
  36. app = wx.App()  
  37. Toolbars(None, -1, 'toolbars')  
  38. app.MainLoop()  





    纵向toolbar

python 代码
 
  1. #!/usr/bin/python  
  2.   
  3. # verticaltoolbar.py  
  4.   
  5. import wx  
  6.   
  7. class VerticalToolbar(wx.Frame):  
  8.     def __init__(self, parent, id, title):  
  9.     wx.Frame.__init__(self, parent, id, title, size=(240, 300))  
  10. #wx.TB_VERTICAL是纵向 wx.VERTICAL 是横向  
  11.     toolbar = self.CreateToolBar(wx.TB_VERTICAL)  
  12.     toolbar.AddSimpleTool(wx.ID_ANY, wx.Image('icons/book_red.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  13.     toolbar.AddSimpleTool(wx.ID_ANY, wx.Image('icons/book_green.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  14.     toolbar.AddSimpleTool(wx.ID_REDO, wx.Image('icons/process.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  15.     toolbar.AddSimpleTool(wx.ID_EXIT, wx.Image('icons/customcontrol.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  16.   
  17.   
  18.     toolbar.Realize()  
  19.   
  20.   
  21.     self.Centre()  
  22.     self.Show(True)  
  23.   
  24.     def OnExit(self, event):  
  25.     self.Close()  
  26.   
  27.   
  28. app = wx.App()  
  29. VerticalToolbar(None, -1, 'vertical toolbar')  
  30. app.MainLoop()  



    带有分隔符的toolbar
    #!/usr/bin/python

    # toolbars.py

python 代码
 
  1.     import wx  
  2.   
  3.     class Toolbars(wx.Frame):  
  4.         def __init__(self, parent, id, title):  
  5.         wx.Frame.__init__(self, parent, id, title, size=(300, 200))  
  6. #这里如果不加wx.VERTICAL就编程一排的了  
  7.         vbox = wx.BoxSizer(wx.VERTICAL)  
  8.   
  9.         toolbar1 = wx.ToolBar(self, -1)  
  10.         toolbar1.AddSimpleTool(wx.ID_ANY, wx.Image('icons/book_red.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  11.         toolbar1.AddSimpleTool(wx.ID_ANY, wx.Image('icons/book_green.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  12.     #添加一个分隔符  
  13.         toolbar1.AddSeparator()  
  14.         toolbar1.AddSimpleTool(wx.ID_REDO, wx.Image('icons/process.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  15.         toolbar1.EnableTool(wx.ID_REDO, False)  
  16.         toolbar1.Realize()  
  17.   
  18.         toolbar2 = wx.ToolBar(self, -1)  
  19.         toolbar2.AddSimpleTool(wx.ID_EXIT, wx.Image('icons/customcontrol.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  20.         toolbar2.Realize()  
  21.   
  22.         vbox.Add(toolbar1, 0, wx.EXPAND)  
  23.         vbox.Add(toolbar2, 0, wx.EXPAND)  
  24.   
  25.         self.Bind(wx.EVT_TOOL, self.OnExit, id=wx.ID_EXIT)  
  26.   
  27.         self.SetSizer(vbox)  
  28.         self.Centre()  
  29.         self.Show(True)  
  30.   
  31.         def OnExit(self, event):  
  32.         self.Close()  
  33.   
  34.   
  35.     app = wx.App()  
  36.     Toolbars(None, -1, 'toolbars')  
  37.     app.MainLoop()  



分享到:
评论

相关推荐

    wxPython学习笔记

    您可以在几分钟内编写一段...这篇文章是关于 wxPython,但 wxPython 实际是两件事物的组合体:Python 脚本语言和 GUI 功能的 wxWindows 库(关于 wxWindows 的介绍,请参阅 developerWorks上的 “细述 wxWindows” )。

    wxpython学习笔记

    ### wxPython学习笔记 #### 一、简介 wxPython是一个为Python编程语言设计的图形用户界面(GUI)工具包。它允许Python程序员轻松地构建出功能丰富且强大的GUI应用程序。作为一个对wxWidgets库的Python绑定,...

    wxPython-4.0.7.post2.tar.gz

    **wxPython 4.0.7.post2:Python GUI编程的利器** `wxPython` 是一个流行的Python绑定库,它提供了跨平台的图形用户界面(GUI)工具包,基于C++实现的`wxWidgets`库。`wxWidgets`库自身支持多种操作系统,包括...

    wxPython-demo-4.0.3.tar:wxPython官方demo

    2. **布局管理器**:wxPython使用布局管理器(如BoxSizer、GridSizer、FlexGridSizer)来帮助组织和调整窗口中的控件。了解它们的工作原理和配置方式,可以创建出美观且适应不同屏幕尺寸的界面。 3. **事件处理**:...

    wxPython几本好书

    几本很不错的关于python gui的wxPython的书,包括“wxPython in Action(中文版)” 活学活用wxPython “《wxPython in Action》Noel Rappin, Robin Dunn著 2006年版”

    wxpython 学习笔记 第一天

    1,导入 wxpython 库 import wx 2,建立窗体构造类 class 名字(wx.Frame): def __init__(self, parent, id): wx.Frame.__init__(self, parent, id, ‘工具’,size=(300, 200)) 3,建立 面板 panel = wx.Panel(self...

    wxPython-demo-4.0.6_wxpython官方demo_wxPython-demo_wxpython_DEMO_w

    这个压缩包文件"wxPython-demo-4.0.6_wxpython官方demo_wxPython-demo_wxpython_DEMO_w"包含了wxPython的官方演示程序,是学习和探索wxPython功能的理想资源。 【wxPython Demo】是wxPython库附带的一系列示例和...

    wxPython-入门教程.pdf

    2. `wxPython.wx`包含了所有与GUI相关的类和函数。 3. 定义了一个名为_window的类,继承自wxFrame,这是wxPython中的一个基本窗口类。 4. `__init__`方法是初始化函数,创建了一个窗口实例,设置了窗口的大小、样式...

    wxPython in Action 活学活用wxPython

    《wxPython in Action 活学活用wxPython》是一本深入浅出的教程,旨在帮助读者掌握使用wxPython这一强大的GUI(图形用户界面)工具包进行Python编程的方法。wxPython是Python编程语言中用于创建桌面应用的一个流行库...

    python2.4 and wxPython

    【Python 2.4 和 wxPython】 Python 2.4 是 Python 语言的一个较旧版本,它在2004年发布,并于2010年停止支持。这个版本包含了许多基础的Python特性,如元组赋值、生成器、with语句等。然而,随着语言的发展,许多新...

    wxpython中文文档(极好查询学习)

    【wxPython中文文档详解】 wxPython是一款用于创建GUI(图形用户界面)的Python库,它提供了丰富的组件和功能,使得开发者能够用Python语言构建出美观且功能强大的桌面应用程序。wxPython是基于流行的wxWidgets库,...

    Python 的WxPython库开源扫雷游戏

    Python WxPython开源扫雷游戏PyMine为开源扫雷游戏PyMine 使用Python语言和WxPython UI框架。本例移植自开源例程JMine 请在程序所在目录使用python PyMine.py启动例程需要先安装Python 3.11和wxPython 4.2Python ...

    wxpython3.9_py2.7

    2. **wxPython2.9-win32-docs-demos-2.9.4.0.exe** - 这是一个包含wxPython 2.9的Windows 32位版本的文档和演示程序的安装包,可能包括API参考、示例代码和教程。 3. **wxPython in Action.pdf** - 这可能是另一本...

    wxPython教程及实例

    2. **基础知识**:讲解`wxPython`的基本概念,如窗口、框架、面板、事件处理和布局管理器。 3. **控件与组件**:详述各种控件的使用,如按钮、文本框、复选框、单选按钮、列表框、滑块等,以及如何在界面中添加它们...

    wxpython学习笔记(推荐查看)

    wxPython是Python编程语言的一个GUI工具箱。他使得Python程序员能够轻松的创建具有健壮、功能强大的图形用户界面的程序。它是Python语言对流行的wxWidgets跨平台GUI工具库的绑定。而wxWidgets是用C++语言写成的。和...

    wxPython and PyOpengl源码

    2. **定义类**:定义一个自定义的GLCanvas类,继承自wx.GLCanvas。这个类将处理OpenGL上下文的创建、初始化以及渲染循环。 3. **初始化**:在类的构造函数中,设置OpenGL上下文属性,如颜色缓冲、深度缓冲等,并可能...

    wxpython中文教程wxpython中文教程

    [2]from wxPython.wx import * [3]class _window(wxFrame): [4] def __init__(self, parent, id, title): [5] wxFrame.__init__(self, parent, -1, title, size=(200, 100), style=wxDEFAULT_FRAME_STYLE | wxNO_...

    wxPython开发参考书籍

    **wxPython 开发指南** **一、什么是 wxPython** wxPython 是一个 Python 模块,它为 Python 程序员提供了与操作系统用户界面(GUI)进行交互的能力。它是基于跨平台的 wxWidgets 库,使得开发者可以用 Python 来...

Global site tag (gtag.js) - Google Analytics