wxPython菜单和工具栏

wxPython菜单栏、菜单、菜单项

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

如下如所示菜单栏、菜单、菜单项:

wxPython菜单和工具栏_第1张图片

代码如下:

import wx


# 自定义窗口类MyFrame
class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title="菜单", size=(400, 300))
        self.Center()   #窗口居中
        self.text = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE)    #创建一个多行文本控件
        vbox = wx.BoxSizer(wx.VERTICAL) #创建一个垂直布局管理器
        self.SetSizer(vbox)#为此窗口添加此布局管理器
        vbox.Add(self.text, 1, flag=wx.EXPAND | wx.ALL, border=1)  #将文本添加进当前窗口

        menubar = wx.MenuBar()  # 创建一个菜单栏,
        self.SetMenuBar(menubar)  # 给窗口添加此菜单栏
        file_menu = wx.Menu()  # 创建一个菜单
        menubar.Append(file_menu, 'File')  # 在菜单栏上添加此菜单

        file_menu.Append(id=wx.ID_NEW, item='New', helpString='new file')  # 往菜单中添加一个菜单项
        self.Bind(wx.EVT_MENU, self.on_newitem_click, id=wx.ID_NEW)  # 为此菜单项添加事件处理
        file_menu.AppendSeparator()  # 分割线

        edit_menu = wx.Menu()  # 创建一个edit_menu菜单
        file_menu.AppendSubMenu(edit_menu, "Edit")  # file_menu上面添加edit_menu菜单
        copy_item = wx.MenuItem(edit_menu, 100, text="Copy", kind=wx.ITEM_NORMAL)  # 创建copy_item菜单项
        edit_menu.Append(copy_item)  # edit_menu菜单添加copy_item菜单项

        cut_item = wx.MenuItem(edit_menu, 101, text="Cut", kind=wx.ITEM_NORMAL)  # 创建cut_item菜单项
        edit_menu.Append(cut_item)  # edit_menu菜单添加cut_item菜单项

        paste_item = wx.MenuItem(edit_menu, 102, text="Paste", kind=wx.ITEM_NORMAL)  # 创建paste_item菜单项
        edit_menu.Append(paste_item)  # edit_menu菜单添加paste_item菜单项
        self.Bind(wx.EVT_MENU, self.on_editmenu_click, id=100, id2=102)  # 为这3个添加事件处理

    def on_newitem_click(self, event):
        self.text.SetLabel('单击【New】菜单')

    def on_editmenu_click(self, event):
        event_id = event.GetId()
        if event_id == 100:
            self.text.SetLabel('单击【Copy】菜单')
        elif event_id == 101:
            self.text.SetLabel('单击【Cut】菜单')
        else:
            self.text.SetLabel('单击【Paste】菜单')


class App(wx.App):
    def OnInit(self):
        # 创建窗口对象
        frame = MyFrame()
        frame.Show()
        return True

    def OnExit(self):
        print("quit")
        return 0


if __name__ == '__main__':
    app = App()
    app.MainLoop()

wxPython工具栏

如下图所示工具栏:

                                                wxPython菜单和工具栏_第2张图片

代码如下所示:

import wx


# 自定义窗口类MyFrame
class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title="菜单栏和工具栏", size=(500, 400))
        self.Center()   #窗口居中
        self.text = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE)    #创建一个多行文本控件
        vbox = wx.BoxSizer(wx.VERTICAL) #创建一个垂直布局管理器
        self.SetSizer(vbox)#为此窗口添加此布局管理器
        vbox.Add(self.text, 1, flag=wx.EXPAND | wx.ALL, border=1)  #将文本添加进当前窗口

        menubar = wx.MenuBar()  # 创建一个菜单栏,
        self.SetMenuBar(menubar)  # 给窗口添加此菜单栏
        file_menu = wx.Menu()  # 创建一个菜单
        menubar.Append(file_menu, 'File')  # 在菜单栏上添加此菜单

        file_menu.Append(id=wx.ID_NEW, item='New', helpString='new file')  # 往菜单中添加一个菜单项
        self.Bind(wx.EVT_MENU, self.on_newitem_click, id=wx.ID_NEW)  # 为此菜单项添加事件处理
        file_menu.AppendSeparator()  # 分割线

        edit_menu = wx.Menu()  # 创建一个edit_menu菜单
        file_menu.AppendSubMenu(edit_menu, "Edit")  # file_menu上面添加edit_menu菜单
        copy_item = wx.MenuItem(edit_menu, 100, text="Copy", kind=wx.ITEM_NORMAL)  # 创建copy_item菜单项
        edit_menu.Append(copy_item)  # edit_menu菜单添加copy_item菜单项

        cut_item = wx.MenuItem(edit_menu, 101, text="Cut", kind=wx.ITEM_NORMAL)  # 创建cut_item菜单项
        edit_menu.Append(cut_item)  # edit_menu菜单添加cut_item菜单项

        paste_item = wx.MenuItem(edit_menu, 102, text="Paste", kind=wx.ITEM_NORMAL)  # 创建paste_item菜单项
        edit_menu.Append(paste_item)  # edit_menu菜单添加paste_item菜单项
        self.Bind(wx.EVT_MENU, self.on_editmenu_click, id=100, id2=102)  # 为这3个添加事件处理

        #工具栏
        tb=wx.ToolBar(self,wx.ID_ANY)    #创建工具栏对象
        self.ToolBar=tb    #将此工具栏对象放入当前窗口
        #设置工具栏图标大小
        tsize=(30,30)
        #创建4个Bitmap图标
        new_bmp=wx.ArtProvider.GetBitmap(wx.ART_NEW,wx.ART_TOOLBAR,tsize)
        open_bmp = wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN, wx.ART_TOOLBAR, tsize)
        copy_bmp = wx.ArtProvider.GetBitmap(wx.ART_COPY, wx.ART_TOOLBAR, tsize)
        paste_bmp = wx.ArtProvider.GetBitmap(wx.ART_PASTE, wx.ART_TOOLBAR, tsize)
        #将这4个图标放入工具栏
        tb.AddTool(200,'new',new_bmp,'New')
        tb.AddTool(201, 'open', open_bmp, 'Open')
        tb.AddTool(202, 'copy', copy_bmp, 'Copy')
        tb.AddTool(203, 'paste', paste_bmp, 'Paste')
        #分割
        tb.AddSeparator()
        #放入2个自己提供的图标
        tb.AddTool(204, 'back',wx.Bitmap('icon/back.png'), 'back')
        tb.AddTool(205, 'forward', wx.Bitmap('icon/forward.png'), 'Forword')
        #为这6个图标绑定事件处理
        self.Bind(wx.EVT_MENU,self.on_click_tool,id=200,id2=205)

        tb.Realize()    #提交工具栏设置

    #为New菜单项添加事件处理
    def on_newitem_click(self, event):
        self.text.SetLabel('新建')
    #为Copy,Cut,Paste菜单项添加事件处理
    def on_editmenu_click(self, event):
        event_id = event.GetId()
        if event_id == 100:
            self.text.SetLabel('复制')
        elif event_id == 101:
            self.text.SetLabel('剪切')
        else:
            self.text.SetLabel('粘贴')
    #为工具栏的图标添加事件处理
    def on_click_tool(self,event):
        event_id=event.GetId()
        if event_id==200:
            self.text.SetLabel('新建')
        elif event_id==201:
            self.text.SetLabel('打开')
        elif event_id==202:
            self.text.SetLabel('复制')
        elif event_id==203:
            self.text.SetLabel('粘贴')
        elif event_id==204:
            self.text.SetLabel('后退')
        else:
            self.text.SetLabel('前进')
class App(wx.App):
    def OnInit(self):
        # 创建窗口对象
        frame = MyFrame()
        frame.Show()
        return True

    def OnExit(self):
        print("quit")
        return 0


if __name__ == '__main__':
    app = App()
    app.MainLoop()

 

你可能感兴趣的:(Python,wxPython,MenuBar,Menu,MenuItem,ToolBar)