wxPython菜单与工具栏基础示例

来源:互联网 发布:淘宝零食店策划书 编辑:程序博客网 时间:2024/06/06 02:49


测试环境:

系统;windows xp

python version: 2.7.4

1.基本的api介绍

Package wx :: Class Menu Type MenuMethod Summary Menu       __init__(self, title, style)                      __repr__(self)  MenuItem   Append(self, id, text, help, kind)  MenuItem   AppendCheckItem(self, id, text, help)  MenuItem   AppendItem(self, item)  MenuItem   AppendMenu(self, id, text, submenu, help)  Package wx :: Class MenuBar Type MenuBarWindow      __init__(self, parent, id, pos, size, style, name)                    Construct and show a generic Window.                    __repr__(self)  bool           Append(self, menu, title)                    Attach(self, frame)                    Check(self, id, check)                    Detach(self)  bool           Enable(self, enable)                   Enable or disable the window for user input.                   EnableTop(self, pos, enable)  Package wx :: Class EvtHandler Type EvtHandlerEvtHandler   __init__(self)                       __repr__(self)                      AddPendingEvent(self, event)                      Bind(self, event, handler, source, id, id2)  


2.简单菜单

在我们的第一个例子中,我们将创建一个menubar,一个文件菜单。菜单将只有一个菜单项。通过选择项应用程序退出。

示例代码如下:

import wxclass Example(wx.Frame):    def __init__(self,*args,**kw):        wx.Frame.__init__(self,None)    def InitUI(self):        menuBar = wx.MenuBar()        filemenu = wx.Menu()                fitem = filemenu.Append(001,"exit","Quit Applications")        fitem1 = filemenu.Append(002,"002","Quit Applications")        menuBar.Append(filemenu,"&File")        self.SetMenuBar(menuBar)                self.Bind(wx.EVT_MENU, self.OnQuit, fitem)                self.SetSize((400,250))        self.SetTitle("SimpleMenu")                self.Center()        self.Show()    def OnQuit(self,e):        self.Close()    def main():    app = wx.App()    exa = Example(None)    exa.InitUI()    app.MainLoop()if __name__ == '__main__':    main()


这是一个以最小的菜单功能小例子。
menubar = wx.MenuBar()首先我们创建一个menubar对象。
fileMenu = wx.Menu()接下来,我们创建一个菜单对象。
fitem = fileMenu.Append(wx.ID_EXIT, 'Quit', 'Quit application')
我们追加到菜单项的菜单对象。第一个参数是菜单项的ID。标准ID会自动添加一个图标和快捷(在windows上没有出现图标,也不能用快捷键)。 CTRL + Q在我们的例子。第二个参数是菜单项的名称。最后一个参数定义状态栏上显示的菜单项被选中时,简短的帮助字符串。在这里,我们没有创造出wx.MenuItem明确。它是幕后的append()方法创建。该方法返回创建的菜单项。此参考将使用后绑定事件。
self.Bind(wx.EVT_MENU, self.OnQuit, fitem)
我们绑定菜单项wx.EVT_MENU的的的定制OnQuit()方法。这种方法将关闭应用程序。
menubar.Append(fileMenu, '&File')
self.SetMenuBar(menubar)
之后,我们追加到菜单栏菜单。 &字符创建一个快捷键。后面的字符下划线。这种方式是通过按Alt + F快捷访问菜单(windows上好像不能用)。最后,我们呼吁的SetMenuBar()方法。这种方法属于wx.Frame的部件。它设置的菜单栏。

运行示例图



3.快捷键与图标

在这个例子中,会手动的创建一个快捷键与图标,如下图所示:


示例代码如下:

import wxAPP_EXIT = 1class Example(wx.Frame):    def __init__(self,*args,**kw):        wx.Frame.__init__(self,None)    def InitUI(self):        menuBar = wx.MenuBar()        filemenu = wx.Menu()                qmi = wx.MenuItem(filemenu,APP_EXIT,"&Quit\tCtrl+Q")        bitm = wx.Bitmap("my.png")        bitm.SetSize(size=(20,20))        qmi.SetBitmap(bitm)        filemenu.AppendItem(qmi)                self.Bind(wx.EVT_MENU, self.OnQuit, id=APP_EXIT)        menuBar.Append(filemenu, '&File')        self.SetMenuBar(menuBar)                self.SetSize((250, 200))        self.SetTitle('Icons and shortcuts')        self.Centre()        self.Show(True)    def OnQuit(self, e):        self.Close()def main():    app = wx.App()    exa = Example(None)    exa.InitUI()    app.MainLoop()if __name__ == '__main__':    main()

4.子菜单和分隔符

每个菜单,也可以有一个子菜单。这样我们就可以把成组类似的命令。例如,我们可以将像个人栏,地址栏,状态栏或导航栏,将工具栏子菜单隐藏/显示各种工具栏的命令。在菜单中,我们可以逗号分开一个分隔的命令。这是一个简单的线条。常见的做法是单独的命令,如新建,打开,保存,如打印,打印预览命令与一个单一的分离。在我们的例子中,我们将看到,我们如何能够创建子菜单和菜单分隔

示例图如下:


示例代码:

import wxclass Example(wx.Frame):    def __init__(self,*args,**kw):        wx.Frame.__init__(self,None)    def InitUI(self):        menuBar = wx.MenuBar()                fileMenu = wx.Menu()        fileMenu.Append(wx.ID_NEW,"&New")        fileMenu.Append(wx.ID_OPEN, '&Open')        fileMenu.Append(wx.ID_SAVE, '&Save')        fileMenu.AppendSeparator()                imp = wx.Menu()        imp.Append(wx.ID_ANY, 'Import newsfeed list...')        imp.Append(wx.ID_ANY, 'Import bookmarks...')        imp.Append(wx.ID_ANY, 'Import mail...')        qmi = wx.MenuItem(fileMenu, wx.ID_EXIT, '&Quit\tCtrl+W')        fileMenu.AppendMenu(wx.ID_ANY, 'I&mport', imp)           fileMenu.AppendItem(qmi)        menuBar.Append(fileMenu, '&File')                self.SetMenuBar(menuBar)                self.Bind(wx.EVT_MENU, self.OnQuit, qmi)                self.SetSize((400,250))        self.SetTitle("SimpleMenu")        #self.Centre()        self.Center()        self.Show()    def OnQuit(self,e):        self.Close()    def main():    app = wx.App()    ex = Example(None)    ex.InitUI()    app.MainLoop()if __name__ == '__main__':    main()

5.复选菜单Check menu item

There are tree kinds of menu items. 它们有三种
normal item
check item
radio item

在接下来的例子中,我们将演示如何检查菜单项。一个检查菜单项是视觉上表示为一个滴答在菜单。

效果图示:


示例代码:

import wxclass Example(wx.Frame):    def __init__(self,*args,**kw):        wx.Frame.__init__(self,None);    def InitUI(self):        menuBar = wx.MenuBar()        filemenu = wx.Menu()        viewmenu = wx.Menu()                self.shst = viewmenu.Append(wx.ID_ANY,"ShowStatubar","ShowStatubar",kind=wx.ITEM_CHECK)        self.shtl = viewmenu.Append(wx.ID_ANY,"ShowToolBar","ShowToolBar",kind=wx.ITEM_CHECK)                viewmenu.Check(self.shst.GetId(),True)        viewmenu.Check(self.shtl.GetId(),True)                self.Bind(wx.EVT_MENU, self.ToggleStatuBar, self.shst)        self.Bind(wx.EVT_MENU, self.ToggleToolBar, self.shtl)                menuBar.Append(filemenu, '&File')        menuBar.Append(viewmenu, '&View')        self.SetMenuBar(menuBar)                self.toolbar = self.CreateToolBar()        bitm = wx.Bitmap("my.png")        bitm.SetSize(size=(20,20))        self.toolbar.AddLabelTool(1,'',bitm)        self.toolbar.Realize()                self.statusbar = self.CreateStatusBar()        self.statusbar.SetStatusText('Ready')                        self.SetSize((350, 250))        self.SetTitle('Check menu item')        self.Centre()        self.Show(True)            def ToggleStatuBar(self,e):        if self.shst.IsChecked():            self.statusbar.Show()        else:            self.statusbar.Hide()    def ToggleToolBar(self, e):                if self.shtl.IsChecked():            self.toolbar.Show()        else:            self.toolbar.Hide()      def main():    app = wx.App()    exa = Example(None)    exa.InitUI()    app.MainLoop()if __name__ == '__main__':    main()

6.右键菜单Context menu

上下文菜单在某些情况下出现的命令的列表。例如,在Firefox网页浏览器,当我们在网页上右击,我们得到一个上下文菜单。在这里,我们可以重新载入页面,回去或查看页面的源代码。如果我们右键单击工具栏上,我们得到另一个管理工具栏的上下文菜单。有时也被称为上下文菜单弹出菜单。

运行效果图:


示例代码:

import wxclass MyPopupMenu(wx.Menu):    def __init__(self,parent):        super(MyPopupMenu,self).__init__()        self.parent = parent                mmi = wx.MenuItem(self,wx.NewId(),'MiniSize')        self.AppendItem(mmi)        self.Bind(wx.EVT_MENU, self.OnMinimize, mmi)                cmi = wx.MenuItem(self,wx.NewId(),'Close')        self.AppendItem(cmi)        self.Bind(wx.EVT_MENU, self.OnClose, cmi)            def OnMinimize(self,e):        self.parent.Iconize()    def OnClose(self,e):        self.parent.Close()class Example(wx.Frame):    def __init__(self,*args,**kw):        wx.Frame.__init__(self,None);    def InitUI(self):        self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)                self.SetSize((250, 200))        self.SetTitle('Context menu')        self.Centre()        self.Show(True)    def OnRightDown(self,e):        self.PopupMenu(MyPopupMenu(self),e.GetPosition())    def main():    app = wx.App()    exa = Example(None)    exa.InitUI()    app.MainLoop()if __name__ == '__main__':    main()



参考:

wxPython中文教程 简单入门加实例
wxPython菜单与工具栏

如何重新设置Bitmap的大小?http://social.msdn.microsoft.com/Forums/pt-BR/ce4e0b9e-549f-4fb7-a107-a1c3a37839dc/bitmap



原创粉丝点击