wxpython 调用子窗口_wxPython - 复选菜单项和上下文菜单

实战wxPython系列-007

410f2cb31091038fdbd7f5a7b0d924a0.png

复选菜单项

菜单项有三种样式:

  • 常规样式(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()方法可以获得菜单项是否处于复选状态。工具栏的情况也一样。

示例程序的运行结果如下图所示:

5877c0eaa4392e8e155d70bb6884a5db.gif

复选菜单项演示

上下文菜单

上下文菜单常常也称作弹出菜单,在一个交互窗口中,上下文菜单就是一组操作命令的列表。例如,在常见的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()方法获得鼠标的点击位置)。

上下文菜单示例运行结果如下图:

4fe712527fbc6469c75a3188dcc900ec.png

上下文菜单示例

本文知识点

  • 复选菜单项和单选菜单项。
  • 上下文菜单。

请多多关注,评论,收藏,点赞,和转发。


前一篇: wxPython - 怎样给一个菜单添加子菜单

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值