如下如所示菜单栏、菜单、菜单项:
代码如下:
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()
如下图所示工具栏:
代码如下所示:
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()