实战wxPython系列-007
复选菜单项
菜单项有三种样式:
- 常规样式(normal item)
- 复选样式(check item)
- 单选样式(radio item)
在下面的例子中,我们将演示复选菜单项。复选菜单项由菜单中的对勾直观表示。
import wximport os class Example(wx.Frame): def __init__(self, *args, **kwargs): super(Example, self).__init__(*args, **kwargs) self.SetTitle('实战wxPython: 菜单Check操作') self.SetSize(400, 300) self.InitUi() self.Centre() def InitUi(self): menubar = wx.MenuBar() viewMenu = wx.Menu() self.showStatus = viewMenu.Append(wx.ID_ANY, '显示状态条','显示状态条', kind=wx.ITEM_CHECK) self.showTool = viewMenu.Append(wx.ID_ANY, '显示工具条', '显示工具条', kind=wx.ITEM_CHECK) viewMenu.Check(self.showStatus.GetId(), True) viewMenu.Check(self.showTool.GetId(), True) self.Bind(wx.EVT_MENU, self.ToggleStatusBar, self.showStatus) self.Bind(wx.EVT_MENU, self.ToggleToolBar, self.showTool) menubar.Append(viewMenu, '视图(&V)') self.SetMenuBar(menubar) self.toolbar = self.CreateToolBar() self.toolbar.AddTool(1, '', wx.Bitmap(os.path.dirname(__file__) + '/file_new.png')) self.toolbar.AddTool(1, '', wx.Bitmap(os.path.dirname(__file__) + '/file_open.png')) self.toolbar.AddTool(1, '', wx.Bitmap(os.path.dirname(__file__) + '/file_save.png')) self.toolbar.Realize() self.statusbar = self.CreateStatusBar() self.statusbar.SetStatusText('就绪') def ToggleStatusBar(self, e): if self.showStatus.IsChecked(): self.statusbar.Show() else: self.statusbar.Hide() def ToggleToolBar(self, e): if self.showTool.IsChecked(): self.toolbar.Show() else: self.toolbar.Hide() def main(): app = wx.App() window = Example(None) window.Show() app.MainLoop() if __name__ == '__main__': main()
创建一个视图菜单,其中有两个复选菜单项。这两个菜单项将显示和隐藏状态栏和工具栏。
self.showStatus = viewMenu.Append(wx.ID_ANY, '显示状态条','显示状态条', kind=wx.ITEM_CHECK)self.showTool = viewMenu.Append(wx.ID_ANY, '显示工具条', '显示工具条', kind=wx.ITEM_CHECK)
如果要添加复选菜单项,将参数kind设置为wx.ITEM_CHECK即可。kind的默认参数为wx.ITEM_NORMAL。
viewMenu.Check(self.showStatus.GetId(), True)viewMenu.Check(self.showTool.GetId(), True)
当应用程序启动时,工具栏和状态栏都是可见的,因为使用wx.Menu的方法Check()复选上创建的两个菜单项。
def ToggleStatusBar(self, e): if self.showStatus.IsChecked(): self.statusbar.Show() else: self.statusbar.Hide()
根据复选菜单项的状态显示或者隐藏状态栏。使用IsChecked()方法可以获得菜单项是否处于复选状态。工具栏的情况也一样。
示例程序的运行结果如下图所示:
复选菜单项演示
上下文菜单
上下文菜单常常也称作弹出菜单,在一个交互窗口中,上下文菜单就是一组操作命令的列表。例如,在常见的Firefox浏览器中,到我们右键单击网页时,将会弹出一个上下文菜单。在这些菜单项里,我们可重新加载页面,返回或者查看页面源。如果右键单击工具栏,则会弹出另外一个用于管理工具栏的上下文菜单。
import wx class MyPopupMenu(wx.Menu): def __init__(self, parent): super(MyPopupMenu, self).__init__() self.parent = parent menuItemMin = wx.MenuItem(self, wx.NewId(), '最小化') self.Append(menuItemMin) self.Bind(wx.EVT_MENU, self.OnMinimize, menuItemMin) menuItemClose = wx.MenuItem(self, wx.NewId(), '关闭') self.Append(menuItemClose) self.Bind(wx.EVT_MENU, self.OnClose, menuItemClose) def OnMinimize(self, e): self.parent.Iconize() def OnClose(self, e): self.parent.Close() class Example(wx.Frame): def __init__(self, *args, **kwargs): super(Example, self).__init__(*args, **kwargs) self.SetTitle('实战wxPython: 上下文菜单') self.SetSize(400, 300) self.InitUi() self.Centre() def InitUi(self): self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown) def OnRightDown(self, e): self.PopupMenu(MyPopupMenu(self), e.GetPosition()) def main(): app = wx.App() window = Example(None) window.Show() app.MainLoop() if __name__ == '__main__': main()
在这个示例中,我们为主窗口创建了一个上下文菜单。它有两个菜单项,一个菜单项执行最小化应用程序,另一个菜单项将终止应用程序。
class MyPopupMenu(wx.Menu): def __init__(self, parent): super(MyPopupMenu, self).__init__()
创建一个单独的继承自wx.Menu的MyPopupMenu类。
menuItemMin = wx.MenuItem(self, wx.NewId(), '最小化')self.Append(menuItemMin)self.Bind(wx.EVT_MENU, self.OnMinimize, menuItemMin)
创建一个菜单项,并将其添加到上下文菜单。然后将事件处理程序绑定到此菜单项。
如果右键单击窗口,将触发窗口的wx.EVT_RIGHT_DOWN事件,该事件绑定的方法将调用窗口的onRightDown()方法。
def OnRightDown(self, e): self.PopupMenu(MyPopupMenu(self), e.GetPosition())
在onRightDown()方法中,调用PopupMenu()方法显示上下文菜单。其中第一个参数为要显示的菜单。第二个参数是上下文菜单出现的位置。上下文菜单出现在鼠标光标点击的位置(调用事件对象的GetPosition()方法获得鼠标的点击位置)。
上下文菜单示例运行结果如下图:
上下文菜单示例
本文知识点
- 复选菜单项和单选菜单项。
- 上下文菜单。
请多多关注,评论,收藏,点赞,和转发。
前一篇: wxPython - 怎样给一个菜单添加子菜单