• [Python] wxPython 菜单栏控件学习总结(原创)


    1、总结

      1、大体创建过程

        1、创建一个 菜单栏  : menuBar = wx.MenuBar()

          

          相当于这个白色地方,没有File这个菜单

        2、创建 菜单 : fileMenu = wx.Menu()

          

          这两个不是直接“用的”,叫菜单。既用来分类其他 菜单项 的文件夹样

        3、创建 菜单项 : newItem = wx.MenuItem()

          例如上图的 New Copy Cut Paste Radio_One 等等等等。

          这些可以直接“点”的(看作按钮)的叫做 菜单项。

          创建的时候需要分配 id (int 整数),到时候菜单事件处理的时候需要通过传递的 id (event.GetId())来判断单击的按钮。

        4、将 菜单项 添加到 菜单中 : fileMenu.AppendItem(newItem)

          这样当我们单机 File 的时候就会打开这个"文件夹"

          

          并且展示内容,添加多少就展示多少,并且按添加的顺序展示

        5、将 菜单 添加到 菜单栏 中 : menuBar.Append(fileMenu, title = "File")

          之前我们只是构建了一个上图红框+File菜单 的一个整体对象:fileMenu。

          然后我们要把这个 菜单对象 添加到菜单栏中。

        6、将该 菜单栏 设置为我们窗口框架的“菜单栏” : self.SetMenuBar(menuBar)

          即将之前建立的 菜单栏对象 放到窗口上去。

        7、绑定 菜单事件 : self.Bind(wx.EVT_MENT, self.menuHandler)

          调用 Bind() 这个绑定事件的函数,因为其他组件 比如按钮 编辑框 都有事件。

          所以这里的 wx.EVT_MENT 是表示绑定的是 菜单事件。

          menuHandler() 是自定义函数 用来菜单事件。

          

          id = event.GetId() 用来判断单击的 菜单项。

          函数参数名称:event 不能变,只能是这个单词。

        8、窗口框架的处理 : 与菜单栏无关了

          例如 调整大小、出现位置、是否可见

          

       2、各项详解(参考其他)

        1、用到的 class :

          菜单栏 : wx.MenuBar 类

          wx.MenuBar() 
          wx.MenuBar(n, menus, titles, style)

          有一个参数的构造函数,此外还有一个默认的。

          参数“n”表示的菜单的数目。Menu是菜单和标题的数组和字符串数组。如果style参数设置为wx.MB_DOCKABLE,菜单栏可以停靠。

          

          菜单 : wx.Menu 类

          wx.Menu类对象是一个或多个菜单项,其中一个可被用户选择的下拉列表。

            

           该开始 new 菜单对象的时候 只要 fileMenu = wx.Menu() 即可

          之后添加菜单项目的时候,可直接使用 Append() 函数添加,或 wx.MenuItem 类的一个对象被追加。

          wx.Menu.Append(id, text, kind)
            
          Item = Wx.MenuItem(parentmenu, id, text, kind) 
          wx.Menu.Append(Item)
          菜单项:wx.MenuItem 类

          当我们 new 菜单项对象时 需要填几个参数。

    newItem = wx.MenuItem(parentMenu, id, text, kind)

          其中 :

          parentMenu 为其 菜单的对面,比如上文提到的 newMenu 菜单项的 parentMenu 为 fileMenu

          id 为该菜单项的 id 到时候处理 菜单项时间的时候需要用到滴

          text 为这个菜单项的名称

          kind 为该菜单项的类型

          ①注册 快捷键的方法 :参数text = "名称/t快捷键"

          比如 text = "Quit/tCtrl+Q"

          这样就注册了 Ctrl + Q 的快捷键

          ②其他类型菜单项的方法

          菜单项有 3 种:

          

          只需要 参数 kind = 相关类型常量即可

    2、感想

      期间看了找了挺多资料 : http://www.yiibai.com/wxpython/wxpython_menus.html#

      这个里面的很详细,且例子经典。

      o.o 要是先看不懂,就敲抄一边会好很多。

      关于wxPyton 中菜单栏的运用的,以下代码能够很好的展示相关的操作方法。

    3、样例代码

      

     1 #coding:utf-8
     2 #author:Twobox
     3 
     4 import wx
     5 
     6 class Mywin(wx.Frame):
     7     def __init__(self, parent, title):
     8         super(Mywin, self).__init__(parent, title = title)
     9         self.InitUI()
    10 
    11     def InitUI(self):
    12         #创建一个菜单栏
    13         menuBar = wx.MenuBar()
    14 
    15         #创建一个菜单 1
    16         fileMenu = wx.Menu()
    17 
    18         #创建一个菜单项 1-1
    19         newItem = wx.MenuItem(fileMenu, id = wx.ID_NEW, text = 'New', kind = wx.ITEM_NORMAL)
    20         fileMenu.AppendItem(newItem)
    21 
    22         #添加一行线
    23         fileMenu.AppendSeparator()
    24 
    25         #创建一个子菜单 1-2
    26         editMenu = wx.Menu()
    27 
    28         #创建三个子菜单的菜单项目 1-2-1 and 1-2-2 and 1-2-3
    29         cutItem = wx.MenuItem(editMenu, id = 122, text = "Cut", kind = wx.ITEM_NORMAL)
    30         copyItem = wx.MenuItem(editMenu, id = 121, text = "Copy", kind = wx.ITEM_NORMAL)
    31         pasteItem = wx.MenuItem(editMenu, id = 123, text = "Paste", kind = wx.ITEM_NORMAL)
    32         editMenu.AppendItem(copyItem)
    33         editMenu.AppendItem(cutItem)
    34         editMenu.AppendItem(pasteItem)
    35 
    36         #把子菜单 1-2 添加到菜单 1 中
    37         fileMenu.AppendMenu(wx.ID_ANY, "Edit", editMenu)
    38 
    39         # 添加一行线
    40         fileMenu.AppendSeparator()
    41 
    42         #添加两个单选框 1-3 and 1-4
    43         radio1 = wx.MenuItem(fileMenu, id = 13, text = "Radio_One", kind = wx.ITEM_RADIO)
    44         radio2 = wx.MenuItem(fileMenu, id = 14, text = "Radio_Two", kind = wx.ITEM_RADIO)
    45         fileMenu.AppendItem(radio1)
    46         fileMenu.AppendItem(radio2)
    47         #PS.单选框 只在自己区域之间(两行线之间) 相互作用
    48 
    49         # 添加一行线
    50         fileMenu.AppendSeparator()
    51 
    52         #添加一个 可选中 的菜单项 1-5
    53         fileMenu.AppendCheckItem(id = 15, item = "Check")
    54 
    55         #添加一个 菜单项 1-6 并注册快捷键
    56         quit = wx.MenuItem(fileMenu, id = wx.ID_EXIT, text = "Quit	Ctrl+Q", kind = wx.ITEM_NORMAL)
    57         fileMenu.AppendItem(quit)
    58 
    59         #将 fileMenu 菜单添加到菜单栏中
    60         menuBar.Append(fileMenu, title = 'File')
    61 
    62         #设置窗口框架的菜单栏为 menuBar
    63         self.SetMenuBar(menuBar)
    64 
    65         #绑定事件处理
    66         self.Bind(wx.EVT_MENU, self.menuHandler)
    67 
    68         #让其在屏幕中间打开调整大小展示
    69         self.SetSize((300,400))
    70         self.Centre()
    71         self.Show()
    72 
    73     def menuHandler(self, event):
    74         id = event.GetId()
    75         if id == wx.ID_NEW:
    76             print("NEW")
    77         if id == wx.ID_EXIT:
    78             exit(0)
    79 
    80 
    81 
    82 if __name__ == "__main__":
    83     ex = wx.App()
    84     Mywin(None, 'Menu - Test')
    85     #Mywin(None, 'Menu - Test')      #可以同时打开两个窗口  果然体现面向对象的程序开发思想
    86     ex.MainLoop()

    2017-08-20 14:21:26

        

  • 相关阅读:
    第12组 Beta冲刺(2/5)
    第12组 Beta冲刺(1/5)
    第12组 Alpha事后诸葛亮
    第12组 Alpha冲刺(6/6)
    第12组 Alpha冲刺(5/6)
    第12组 Alpha冲刺(4/6)
    第12组 Alpha冲刺(3/6)
    第12组 Alpha冲刺(2/6)
    Why I start blogging.
    第二十章 更新和删除数据
  • 原文地址:https://www.cnblogs.com/Twobox/p/7399871.html
Copyright © 2020-2023  润新知