wxPython菜单与工具栏

Menus and Toolbars菜单与工具栏

 A common part in a GUI application is a menubar. A menubar consists of objects called menus. Top-level menus have their labels on the menubar. The menus have menu items. Menu items are commands that perform a specific action inside the application. Menus can also have submenus, which have their own menu items. The following three classes are used to create menubars in wxPython. A wx.MenuBar, a wx.Menu and a wx.MenuItem.

一个菜单包括菜单的对象。顶层菜单有菜单栏上的标签。菜单菜单项。菜单项命令执行一个应用程序内的具体行动。菜单中还可以有子菜单,其中有自己的菜单项。以下三个类用于创建在wxPython的菜单栏。一个wx.MenuBar,wx.Menu和wx.MenuItem。

Simple menu

简单的菜单 

 In our first example, we will create a menubar with one file menu. The menu will have only one menu item. By selecting the item the application quits.

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

[python] view plain copy
  1. import wx  
  2. class Example(wx.Frame):  
  3.     def __init__(self,*args,**kw):  
  4.         super(Example,self).__init__(*args,**kw)  
  5.         self.InitUI()  
  6.     def InitUI(self):  
  7.         menuBar = wx.MenuBar()  
  8.         filemenu = wx.Menu()  
  9.           
  10.         fitem = filemenu.Append(wx.ID_EXIT,"Quit","Quit Applications")  
  11.         menuBar.Append(filemenu,"&File")  
  12.         self.SetMenuBar(menuBar)  
  13.           
  14.         self.Bind(wx.EVT_MENU, self.OnQuit, fitem)  
  15.           
  16.         self.SetSize((400,250))  
  17.         self.SetTitle("SimpleMenu")  
  18.         #self.Centre()  
  19.         self.Center()  
  20.         self.Show()  
  21.     def OnQuit(self,e):  
  22.         self.Close()  
  23.       
  24. def main():  
  25.     ex = wx.App()  
  26.     Example(None)  
  27.     ex.MainLoop()  
  28. if __name__ == '__main__':  
  29.     main()  

这是一个以最小的菜单功能小例子。

menubar = wx.MenuBar()首先我们创建一个menubar对象。

fileMenu = wx.Menu()接下来,我们创建一个菜单对象。

fitem = fileMenu.Append(wx.ID_EXIT, 'Quit', 'Quit application')

我们追加到菜单项的菜单对象。第一个参数是菜单项的ID。标准ID会自动添加一个图标和快捷。 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快捷访问菜单。最后,我们呼吁的SetMenuBar()方法。这种方法属于wx.Frame的部件。它设置的菜单栏。



Icons and shortcuts图标与快捷键

 The next example is esencially the same as the previous one. This time, we manually create a wx.MenuItem.

在下一个例子基本上是与前一个相同。这一次,我们手动创建一个wx.MenuItem。

[python] view plain copy
  1. import wx  
  2.   
  3. APP_EXIT = 1  
  4.   
  5. class Example(wx.Frame):  
  6.     def __init__(self,*args,**kw):  
  7.         super(Example,self).__init__(*args,**kw)  
  8.         self.InitUI()  
  9.     def InitUI(self):  
  10.         menuBar = wx.MenuBar()  
  11.         filemenu = wx.Menu()  
  12.           
  13.         qmi = wx.MenuItem(filemenu,APP_EXIT,"&Quit\tCtrl+Q")  
  14.         qmi.SetBitmap(wx.Bitmap("exit.png"))  
  15.         filemenu.AppendItem(qmi)  
  16.           
  17.         self.Bind(wx.EVT_MENU, self.OnQuit, id=APP_EXIT)  
  18.   
  19.         menuBar.Append(filemenu, '&File')  
  20.         self.SetMenuBar(menuBar)  
  21.           
  22.         self.SetSize((250200))  
  23.         self.SetTitle('Icons and shortcuts')  
  24.         self.Centre()  
  25.         self.Show(True)  
  26.     def OnQuit(self, e):  
  27.         self.Close()  
  28.   
  29. def main():  
  30.     ex = wx.App()  
  31.     Example(None)  
  32.     ex.MainLoop()  
  33. if __name__ == '__main__':  
  34.     main()  

在本例中,我们创建一个退出菜单项。我们选择了一个自定义图标和菜单项的快捷方式。
qmi = wx.MenuItem(fileMenu, APP_EXIT, '&Quit\tCtrl+Q')
qmi.SetBitmap(wx.Bitmap('exit.png'))
fileMenu.AppendItem(qmi)
我们创建wx.MenuItem对象。 &字符指定一个快捷键。强调符号字符。实际的快捷键定义的字符组合。我们已指定按Ctrl+ Q的人物。因此,如果我们按CTRL + Q,我们关闭应用程序。我们把一个制表符之间的&字符和快捷。这样,我们就设法把它们之间的一些空间。提供了一个菜单项的图标,我们称之为SetBitmap()方法。手动创建的菜单项追加到菜单调用AppendItem()方法。

self.Bind(wx.EVT_MENU, self.OnQuit, id=APP_EXIT)

当我们选择创建菜单项,OnQuit()方法将被调用。


Submenus and separators子菜单和分隔符

 Each menu can also have a submenu. This way we can place similar commands into groups. For example we can place commands that hide/show various toolbars like personal bar, address bar, status bar or navigation bar into a submenu called toolbars. Within a menu, we can seperate commands with a separator. It is a simple line. It is common practice to separate commands like New, Open, Save from commands like Print, Pri

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

[python] view plain copy
  1. ''''' 
  2. Created on 2012-6-30 
  3.  
  4. @author: Administrator 
  5. '''  
  6. import wx  
  7. class Example(wx.Frame):  
  8.     def __init__(self,*args,**kw):  
  9.         super(Example,self).__init__(*args,**kw)  
  10.         self.InitUI()  
  11.     def InitUI(self):  
  12.         menuBar = wx.MenuBar()  
  13.           
  14.         fileMenu = wx.Menu()  
  15.         fileMenu.Append(wx.ID_NEW,"&New")  
  16.         fileMenu.Append(wx.ID_OPEN, '&Open')  
  17.         fileMenu.Append(wx.ID_SAVE, '&Save')  
  18.         fileMenu.AppendSeparator()  
  19.           
  20.         imp = wx.Menu()  
  21.         imp.Append(wx.ID_ANY, 'Import newsfeed list...')  
  22.         imp.Append(wx.ID_ANY, 'Import bookmarks...')  
  23.         imp.Append(wx.ID_ANY, 'Import mail...')  
  24.   
  25.         qmi = wx.MenuItem(fileMenu, wx.ID_EXIT, '&Quit\tCtrl+W')  
  26.         fileMenu.AppendItem(qmi)  
  27.         menuBar.Append(fileMenu, '&File')  
  28.         self.SetMenuBar(menuBar)  
  29.           
  30.         self.Bind(wx.EVT_MENU, self.OnQuit, qmi)  
  31.           
  32.         self.SetSize((400,250))  
  33.         self.SetTitle("SimpleMenu")  
  34.         #self.Centre()  
  35.         self.Center()  
  36.         self.Show()  
  37.     def OnQuit(self,e):  
  38.         self.Close()  
  39.       
  40. def main():  
  41.     ex = wx.App()  
  42.     Example(None)  
  43.     ex.MainLoop()  
  44. if __name__ == '__main__':  
  45.     main()  

在上面的示例中,我们创建一个新的,打开和保存标准菜单项。这些是分开的子菜单中有一个水平分隔符。子菜单中增加了额外的三个菜单项。

[python] view plain copy
  1. fileMenu.Append(wx.ID_NEW, '&New')  
  2. fileMenu.Append(wx.ID_OPEN, '&Open')  
  3. fileMenu.Append(wx.ID_SAVE, '&Save')  

这里我们有三种常见的菜单项。新的、打开和保存。

[python] view plain copy
  1. fileMenu.AppendSeparator()  

菜单分隔符是附有AppendSeparator()方法的。

[python] view plain copy
  1. imp = wx.Menu()  
  2. imp.Append(wx.ID_ANY, 'Import newsfeed list...')  
  3. imp.Append(wx.ID_ANY, 'Import bookmarks...')  
  4. imp.Append(wx.ID_ANY, 'Import mail...')  
  5.   
  6. fileMenu.AppendMenu(wx.ID_ANY, 'I&mport', imp)  

也是一个wx.Menu子菜单中。三个菜单项被追加到菜单。子菜单附加到文件菜单里AppenMenu()方法。



Check menu item复选菜单


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


 In the following example, we will demonstrate the check menu item. A check menu item is visually represented by a tick in the menu.

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

[python] view plain copy
  1. ''''' 
  2. Created on 2012-6-30 
  3.  
  4. @author: Administrator 
  5. '''  
  6. import wx  
  7.   
  8. class Example(wx.Frame):  
  9.     def __init__(self,*args,**kw):  
  10.         super(Example,self).__init__(*args,**kw)  
  11.         self.InitUI()  
  12.     def InitUI(self):  
  13.         menuBar = wx.MenuBar()  
  14.         filemenu = wx.Menu()  
  15.         viewmenu = wx.Menu()  
  16.           
  17.         self.shst = viewmenu.Append(wx.ID_ANY,"ShowStatubar","ShowStatubar",kind=wx.ITEM_CHECK)  
  18.         self.shtl = viewmenu.Append(wx.ID_ANY,"ShowToolBar","ShowToolBar",kind=wx.ITEM_CHECK)  
  19.           
  20.         viewmenu.Check(self.shst.GetId(),True)  
  21.         viewmenu.Check(self.shtl.GetId(),True)  
  22.           
  23.         self.Bind(wx.EVT_MENU, self.ToggleStatuBar, self.shst)  
  24.         self.Bind(wx.EVT_MENU, self.ToggleToolBar, self.shtl)  
  25.           
  26.         menuBar.Append(filemenu, '&File')  
  27.         menuBar.Append(viewmenu, '&View')  
  28.         self.SetMenuBar(menuBar)  
  29.           
  30.         self.toolbar = self.CreateToolBar()  
  31.         self.toolbar.AddLabelTool(1,'',wx.Bitmap("exit.png"))  
  32.         self.toolbar.Realize()  
  33.           
  34.         self.statusbar = self.CreateStatusBar()  
  35.         self.statusbar.SetStatusText('Ready')  
  36.           
  37.           
  38.         self.SetSize((350250))  
  39.         self.SetTitle('Check menu item')  
  40.         self.Centre()  
  41.         self.Show(True)  
  42.           
  43.     def ToggleStatuBar(self,e):  
  44.         if self.shst.IsChecked():  
  45.             self.statusbar.Show()  
  46.         else:  
  47.             self.statusbar.Hide()  
  48.     def ToggleToolBar(self, e):  
  49.           
  50.         if self.shtl.IsChecked():  
  51.             self.toolbar.Show()  
  52.         else:  
  53.             self.toolbar.Hide()        
  54.   
  55. def main():  
  56.     ex = wx.App()  
  57.     Example(None)  
  58.     ex.MainLoop()  
  59. if __name__ == '__main__':  
  60.     main()  

我们有一个视图菜单,我们有两个检查菜单项。这两个菜单项将显示和隐藏一个状态和工具栏。

[python] view plain copy
  1. self.shst = viewMenu.Append(wx.ID_ANY, 'Show statubar',   
  2.     'Show Statusbar', kind=wx.ITEM_CHECK)  
  3. self.shtl = viewMenu.Append(wx.ID_ANY, 'Show toolbar',   
  4.     'Show Toolbar', kind=wx.ITEM_CHECK)  

如果我们想要添加一个检查菜单项,我们设置一种wx.ITEM_CHECK参数。默认的参数是wx.ITEM_NORMAL。这个Append()方法返回一个wx.MenuItem。

[python] view plain copy
  1. viewMenu.Check(self.shst.GetId(), True)  
  2. viewMenu.Check(self.shtl.GetId(), True)  

当应用程序启动时,两个状态和工具栏是可见的。所以我们同时检查菜单项的Check()方法。

[python] view plain copy
  1. def ToggleStatusBar(self, e):  
  2.       
  3.     if self.shst.IsChecked():  
  4.         self.statusbar.Show()  
  5.     else:  
  6.         self.statusbar.Hide()  

显示或隐藏状态,根据检查菜单项的状态。我们发现的IsChecked()方法检查菜单项的状态。用相同的工具栏。




Context menu右键菜单

 A context menu is a list of commands that appears under some context. For example, in a Firefox web browser, when we right click on a web page, we get a context menu. Here we can reload a page, go back or view page source. If we right click on a toolbar, we get another context menu for managing toolbars. Context menus are sometimes called popup menus.

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

[python] view plain copy
  1. ''''' 
  2. Created on 2012-6-30 
  3.  
  4. @author: Administrator 
  5. '''  
  6. import wx  
  7. class MyPopupMenu(wx.Menu):  
  8.     def __init__(self,parent):  
  9.         super(MyPopupMenu,self).__init__()  
  10.         self.parent = parent  
  11.           
  12.         mmi = wx.MenuItem(self,wx.NewId(),'MiniSize')  
  13.         self.AppendItem(mmi)  
  14.         self.Bind(wx.EVT_MENU, self.OnMinimize, mmi)  
  15.           
  16.         cmi = wx.MenuItem(self,wx.NewId(),'Close')  
  17.         self.AppendItem(cmi)  
  18.         self.Bind(wx.EVT_MENU, self.OnClose, cmi)  
  19.           
  20.     def OnMinimize(self,e):  
  21.         self.parent.Iconize()  
  22.     def OnClose(self,e):  
  23.         self.parent.Close()  
  24.   
  25. class Example(wx.Frame):  
  26.     def __init__(self,*args,**kw):  
  27.         super(Example,self).__init__(*args,**kw)  
  28.         self.InitUI()  
  29.           
  30.     def InitUI(self):  
  31.         self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)  
  32.           
  33.         self.SetSize((250200))  
  34.         self.SetTitle('Context menu')  
  35.         self.Centre()  
  36.         self.Show(True)  
  37.     def OnRightDown(self,e):  
  38.         self.PopupMenu(MyPopupMenu(self),e.GetPosition())  
  39.       
  40. def main():  
  41.       
  42.     ex = wx.App()  
  43.     Example(None)  
  44.     ex.MainLoop()      
  45.   
  46.   
  47. if __name__ == '__main__':  
  48.     main()  

在这个例子中,我们创建了一个主窗口的上下文菜单。它有两个项目。一个将最大限度地减少应用程序,其他人会终止它。

[python] view plain copy
  1. class MyPopupMenu(wx.Menu):  
  2.       
  3.     def __init__(self, parent):  
  4.         super(MyPopupMenu, self).__init__()  

我们创建一个wx.Menu类

[python] view plain copy
  1. mmi = wx.MenuItem(self, wx.NewId(), 'Minimize')  
  2. self.AppendItem(mmi)  
  3. self.Bind(wx.EVT_MENU, self.OnMinimize, mmi)  

就创建了一个菜单项。附加的上下文菜单。一个事件处理程序绑定到这个菜单项。

[python] view plain copy
  1. self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)  

如果我们右键单击该框架,我们称之为OnRightDown()方法。

[python] view plain copy
  1. def OnRightDown(self, e):  
  2.     self.PopupMenu(MyPopupMenu(self), e.GetPosition())  

在OnRightDown()方法,我们称之为PopupMenu()方法。这种方法显示上下文菜单。第一个参数是显示菜单。第二个参数是位置,根据上下文菜单就会出现。上下文菜单出现在鼠标光标的地步。以获得实际的鼠标位置,我们称之为GetPosition()方法提供的事件对象。



Toolbars工具条

 Menus group all commands that we can use in an application. Toolbars provide a quick access to the most frequently used commands. 
菜单组的所有命令,我们可以在应用程序中使用。工具栏提供一个快速访问最常用的命令。

 To create a toolbar, we call the CreateToolBar() method of the frame widget.

 要创建一个工具栏,我们调用CreateToolBar()方法的框架部件。

[python] view plain copy
  1. import wx  
  2. class Example(wx.Frame):  
  3.     def __init__(self,*args,**kw):  
  4.         super(Example,self).__init__(*args,**kw)  
  5.         self.InitUI()  
  6.     def InitUI(self):  
  7.         toolbar = self.CreateToolBar()  
  8.         qtool = toolbar.AddLabelTool(wx.ID_ANY,"Quit",wx.Bitmap("exit.png"))  
  9.         toolbar.Realize()  
  10.           
  11.         self.Bind(wx.EVT_TOOL, self.OnQuit, qtool)  
  12.         self.SetSize((500,300))  
  13.         self.Centre()  
  14.         self.Show(True)  
  15.     def OnQuit(self,e):  
  16.         self.Close()  
  17. def main():  
  18.     ex = wx.App()  
  19.     Example(None)  
  20.     ex.MainLoop()  
  21. if __name__ == '__main__':  
  22.     main()  

在我们的示例中,我们有一个工具栏提供了一个工具。 当我们点击它,这个工具将关闭应用程序。

[python] view plain copy
  1. toolbar = self.CreateToolBar()  

我们创建了一个工具栏。默认情况下,这个工具条是水平的,没有边界和显示图标。

[python] view plain copy
  1. qtool = toolbar.AddLabelTool(wx.ID_ANY, 'Quit', wx.Bitmap('texit.png'))  

创建一个工具栏工具,我们称之为AddLabelTool()方法。第二个参数是该工具的标签,第三个是该工具的图片。注意,这个标签是不可见的,因为默认样式只显示图标。

[python] view plain copy
  1. toolbar.Realize()  

之后,我们已经把我们的项目到工具栏,调用Realize()方法。此方法在Linux上不是必须,但windows上要调用。


如果我们想要创建一个以上的工具栏,我们必须采取不同的方式。

[python] view plain copy
  1. import wx  
  2. class Example(wx.Frame):  
  3.     def __init__(self,*args,**kw):  
  4.         super(Example,self).__init__(*args,**kw)  
  5.         self.InitUI()  
  6.     def InitUI(self):  
  7.         vbox = wx.BoxSizer(wx.VERTICAL)  
  8.           
  9.         toolbar1 = wx.ToolBar(self)  
  10.         toolbar1.AddLabelTool(wx.ID_ANY, '', wx.Bitmap("1.png"))  
  11.         toolbar1.AddLabelTool(wx.ID_ANY, '', wx.Bitmap("2.png"))  
  12.         toolbar1.AddLabelTool(wx.ID_ANY, '', wx.Bitmap("3.png"))  
  13.         toolbar1.Realize()  
  14.           
  15.         toolbar2 = wx.ToolBar(self)  
  16.         qtool = toolbar2.AddLabelTool(wx.ID_EXIT, '', wx.Bitmap("exit.png"))  
  17.         toolbar2.Realize()  
  18.           
  19.         vbox.Add(toolbar1,0,wx.EXPAND)  
  20.         vbox.Add(toolbar2,0,wx.EXPAND)  
  21.           
  22.         self.Bind(wx.EVT_TOOL, self.OnQuit, qtool)  
  23.           
  24.         self.SetSizer(vbox)  
  25.           
  26.         self.SetSize((500,300))  
  27.         self.Centre()  
  28.         self.Show(True)  
  29.     def OnQuit(self,e):  
  30.         self.Close()  
  31. def main():  
  32.     ex = wx.App()  
  33.     Example(None)  
  34.     ex.MainLoop()  
  35. if __name__ == '__main__':  
  36.     main()  

在上面的示例中,我们创建两个水平工具栏

[python] view plain copy
  1. toolbar1 = wx.ToolBar(self)  
  2. ...   
  3. toolbar2 = wx.ToolBar(self)  

我们创建两个工具栏对象。然后放到一个垂直的盒子。



Enable, disable启用、禁用

 In the following example, we will show, how we can enable and disable toolbar buttons. We will also see a separator line.

在接下来的例子中,我们将展示,我们如何启用和禁用的工具栏按钮。我们还将看到一条分隔线。

[python] view plain copy
  1. ''''' 
  2. Created on 2012-7-1 
  3.  
  4. @author: Administrator 
  5. '''  
  6. import wx  
  7. class Example(wx.Frame):  
  8.     def __init__(self,*args,**kw):  
  9.         super(Example,self).__init__(*args,**kw)  
  10.         self.InitUI()  
  11.     def InitUI(self):  
  12.         self.count = 5  
  13.           
  14.         self.toolbar = self.CreateToolBar()  
  15.         tundo = self.toolbar.AddLabelTool(wx.ID_UNDO,'',wx.Bitmap("1.png"))  
  16.         tredo = self.toolbar.AddLabelTool(wx.ID_REDO,'',wx.Bitmap("2.png"))  
  17.         self.toolbar.EnableTool(wx.ID_REDO,False)  
  18.         self.toolbar.AddSeparator()  
  19.           
  20.         texit = self.toolbar.AddLabelTool(wx.ID_EXIT,'',wx.Bitmap("exit.png"))  
  21.         self.toolbar.Realize()  
  22.           
  23.         self.Bind(wx.EVT_TOOL, self.OnQuit,texit)  
  24.         self.Bind(wx.EVT_TOOL, self.OnUndo,tundo)  
  25.         self.Bind(wx.EVT_TOOL, self.OnTredo,tredo)  
  26.           
  27.         self.SetSize((500,300))  
  28.         self.Centre()  
  29.         self.Show(True)  
  30.     def OnQuit(self,e):  
  31.         self.Close()  
  32.     def OnUndo(self,e):  
  33.         if self.count > 1 and self.count <= 5:  
  34.             self.count = self.count -1  
  35.         if self.count == 1:  
  36.             self.toolbar.EnableTool(wx.ID_UNDO,False)  
  37.         if self.count == 4:  
  38.             self.toolbar.EnableTool(wx.ID_REDO,True)  
  39.     def OnTredo(self,e):  
  40.         if self.count < 5 and self.count >= 1:  
  41.             self.count = self.count + 1  
  42.         if self.count == 5:  
  43.             self.toolbar.EnableTool(wx.ID_REDO,False)  
  44.         if self.count == 2:  
  45.             self.toolbar.EnableTool(wx.ID_UNDO,True)  
  46. def main():  
  47.     ex = wx.App()  
  48.     Example(None)  
  49.     ex.MainLoop()  
  50. if __name__ == '__main__':  
  51.     main()  

在我们的例子中,我们有三个工具栏按钮。一个按钮用于退出应用程序。其他两个按钮的撤消和重做按钮。他们模拟在应用程序中的撤消/重做功能。 (对于一个真实的例子,技巧和窍门)我们有4个变化。撤消和重做按钮被禁用。

[python] view plain copy
  1. self.toolbar.EnableTool(wx.ID_REDO, False)  
  2. self.toolbar.AddSeparator()  

在开始的时候,重做按钮被禁用。我们可以通过它调用EnableTool()方法。我们可以在工具栏上创建逻辑组。我们可以由一个小型垂直线分开的不同群体的按钮。要做到这一点,我们调用AddSeparator()方法。

[python] view plain copy
  1. def OnUndo(self, e):  
  2.     if self.count > 1 and self.count <= 5:  
  3.         self.count = self.count - 1  
  4.   
  5.     if self.count == 1:  
  6.         self.toolbar.EnableTool(wx.ID_UNDO, False)  
  7.   
  8.     if self.count == 4:  
  9.         self.toolbar.EnableTool(wx.ID_REDO, True)  

我们模拟的撤消和重做功能。我们有4个变化。如果有什么留下来撤消,撤消按钮被禁用。后撤销的第一个变化,我们启用重做按钮。同样的逻辑适用于OnRedo()方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值