复选菜单项
菜单项有三种样式:
- 常规样式(normal item)
- 复选样式(check item)
- 单选样式(radio item)
在下面的例子中,我们将演示复选菜单项。复选菜单项由菜单中的对勾直观表示。
import wx
import 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()方法获得鼠标的点击位置)。
上下文菜单示例运行结果如下图:
上下文菜单示例
本文知识点
- 复选菜单项和单选菜单项。
- 上下文菜单。