wxPython编程学习笔记(09)wx.Python Menu 菜单

作者:J.sky · 发表于:
2019-01-03T18:08:40.000000Z
· 更新于:
2023-08-13T22:54:33.269783Z
· Tag: Python GUI

输入图片说明

Menu 菜单

菜单是程序经常用到的小部件,我们来看看如何创建。

    self.menubar = wx.MenuBar()#创建一个程序菜单
    self.fileMenu = wx.Menu()#创建一个一级菜单,这个菜单里可以继续加入菜单,就可以产行二级菜单
    self.new = wx.MenuItem(self.fileMenu,9,"new")#创建菜单项
    self.fileMenu.Append(self.new)#添加菜单项

以上这几个操作就可以创建一个菜单及菜单项了

wxPython 右键菜单

创建方法,可以先创建一个菜单类class MyPopupMenu(wx.Menu) 然后再类中添加菜单项,最后在窗口程序中添加右键绑定一个事件:self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown) 然后事件函数中生成这个菜单self.PopupMenu(MyPopupMenu(self), e.GetPosition()) 这样,窗口程序中就有一个右键菜单了,完整的代码再下边,可以跑跑试试

import wx

class MyPopupMenu(wx.Menu):

    def __init__(self, parent):
        super(MyPopupMenu, self).__init__()

        self.parent = parent

        mmi = wx.MenuItem(self, wx.NewId(), 'Minimize')
        self.Append(mmi)
        self.Bind(wx.EVT_MENU, self.OnMinimize, mmi)

        cmi = wx.MenuItem(self, wx.NewId(), 'Close')
        self.Append(cmi)
        self.Bind(wx.EVT_MENU, self.OnClose, cmi)


    def OnMinimize(self, e):
        self.parent.Iconize()

    def OnClose(self, e):
        self.parent.Close()

class HelloFrame(wx.Frame):
    def __init__(self, *args, **kw):
        #调用父类的创建方法
        super(HelloFrame, self).__init__(*args, **kw)

        self.menubar = wx.MenuBar()#创建一个程序菜单
        self.fileMenu = wx.Menu()#创建一个一级菜单,这个菜单里可以继续加入菜单,就可以产行二级菜单
        self.new = wx.MenuItem(self.fileMenu,9,"new")#创建菜单项
        self.fileMenu.Append(self.new)#添加菜单项

        self.editMenu = wx.Menu()
        self.copyItem = wx.MenuItem(self.editMenu, 100, text="copy", kind=wx.ITEM_NORMAL)
        self.editMenu.Append(self.copyItem)
        self.cutItem = wx.MenuItem(self.editMenu, 101, text="cut", kind=wx.ITEM_NORMAL)
        self.editMenu.Append(self.cutItem)
        self.pasteItem = wx.MenuItem(self.editMenu, 102, text="paste", kind=wx.ITEM_NORMAL)
        self.editMenu.Append(self.pasteItem)

        self.fileMenu.Append(22, "Edit", self.editMenu)
        self.fileMenu.AppendSeparator()
        self.fileMenu.AppendSeparator()#分隔线
        self.qmi = wx.MenuItem(self.fileMenu, 1, '&Quit\tCtrl+Q')
        self.fileMenu.Append(self.qmi)

        self.Bind(wx.EVT_MENU, self.OnQuit, id=1)

        self.menubar.Append(self.fileMenu, '&File')
        self.SetMenuBar(self.menubar)

        self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)

    def OnRightDown(self, e):
        self.PopupMenu(MyPopupMenu(self), e.GetPosition())

    def OnQuit(self, e):
        self.Close()

def main():
    app = wx.App(False)
    frm = HelloFrame(None, title='wx.MenuBar 菜单',)
    frm.Show()#显示窗口
    app.MainLoop()#持续更新窗口


if __name__ == '__main__':
        main()

本文源码下载: