image.png

    1. 菜单界面元素由菜单栏、菜单、菜单项。
    2. 菜单栏是菜单的载体,它属于程序窗体, 不放在其他容器中。
    3. 菜单栏中可以包括多个菜单,每个菜单由自己的名称。
    4. 每个菜单中可以包含多个菜单项,通常情况下,每个菜单项对应一个特定的功能,用户点击菜单项来触发相应的事件。
    5. 在wxPython中,编写菜单的基本步骤是:
    • 创建菜单栏
    • 创建菜单,并将菜单加入到菜单栏
    • 创建菜单项,然后将菜单项加入到菜单中
    • 为菜单项添加处理事件

    testMenu.py

    1. import wx
    2. import wx.grid
    3. # 自定义窗口类MyFrame
    4. class MyFrame(wx.Frame):
    5. def __init__(self):
    6. super().__init__(parent=None, title='使用菜单', size=(550, 500))
    7. self.Centre() # 设置窗口居中
    8. self.text = wx.TextCtrl(self, -1, style=wx.EXPAND | wx.TE_MULTILINE)
    9. vbox = wx.BoxSizer(wx.VERTICAL)
    10. vbox.Add(self.text, proportion=1, flag=wx.EXPAND | wx.ALL, border=1)
    11. self.SetSizer(vbox)
    12. menubar = wx.MenuBar()
    13. file_menu = wx.Menu()
    14. new_item = wx.MenuItem(file_menu, wx.ID_NEW, text="新建", kind=wx.ITEM_NORMAL)
    15. self.Bind(wx.EVT_MENU, self.on_newitem_click, id=wx.ID_NEW)
    16. file_menu.Append(new_item)
    17. file_menu.AppendSeparator()
    18. edit_menu = wx.Menu()
    19. copy_item = wx.MenuItem(edit_menu, 100, text="复制", kind=wx.ITEM_NORMAL)
    20. edit_menu.Append(copy_item)
    21. cut_item = wx.MenuItem(edit_menu, 101, text="剪切", kind=wx.ITEM_NORMAL)
    22. edit_menu.Append(cut_item)
    23. paste_item = wx.MenuItem(edit_menu, 102, text="粘贴", kind=wx.ITEM_NORMAL)
    24. edit_menu.Append(paste_item)
    25. self.Bind(wx.EVT_MENU, self.on_editmenu_click, id=100, id2=102)
    26. file_menu.Append(wx.ID_ANY, "编辑", edit_menu)
    27. menubar.Append(file_menu, '文件')
    28. self.SetMenuBar(menubar)
    29. def on_newitem_click(self, event):
    30. self.text.SetLabel('单击【新建】菜单')
    31. def on_editmenu_click(self, event):
    32. event_id = event.GetId()
    33. if event_id == 100:
    34. self.text.SetLabel('单击【复制】菜单')
    35. elif event_id == 101:
    36. self.text.SetLabel('单击【剪切】菜单')
    37. else:
    38. self.text.SetLabel('单击【粘贴】菜单')
    39. class App(wx.App):
    40. def OnInit(self):
    41. # 创建窗口对象
    42. frame = MyFrame()
    43. frame.Show()
    44. return True
    45. if __name__ == '__main__':
    46. app = App()
    47. app.MainLoop() # 进入主事件循环