工具栏(toolbar)是一个把你的应用程序中最常用命令或操作分为不同组别的部件. 作为典型,保存、打开、剪切、复制、粘贴、撤销、重做等都是工具栏中的项目. 工具栏的用途是节省时间. 从工具栏执行一个操作你只需一次点击,而从菜单的话要两次操作.
[more…]
#!/usr/bin/python
#coding=utf-8
#toolbar.py
import wx
class MyToolBar(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition,
wx.Size(350, 250))
vbox = wx.BoxSizer(wx.VERTICAL)
toolbar = wx.ToolBar(self, -1,
style=wx.TB_HORIZONTAL | wx.NO_BORDER)
toolbar.AddSimpleTool(1, wx.Image('./icons/stock_new.png',
wx.BITMAP_TYPE_PNG).ConvertToBitmap(),
'新建', '')
toolbar.AddSimpleTool(2, wx.Image('./icons/stock_open.png',
wx.BITMAP_TYPE_PNG).ConvertToBitmap(),
'打开', '')
toolbar.AddSimpleTool(3, wx.Image('./icons/stock_save.png',
wx.BITMAP_TYPE_PNG).ConvertToBitmap(),
'保存', '')
toolbar.AddSimpleTool(4, wx.Image('./icons/stock_exit.png',
wx.BITMAP_TYPE_PNG).ConvertToBitmap(),
'退出', '')
toolbar.Realize()
vbox.Add(toolbar, 0, border=5)
self.SetSizer(vbox)
self.statusbar = self.CreateStatusBar()
self.Center()
self.Bind(wx.EVT_TOOL, self.OnNew, id=1)
self.Bind(wx.EVT_TOOL, self.OnOpen, id=2)
self.Bind(wx.EVT_TOOL, self.OnSave, id=3)
self.Bind(wx.EVT_TOOL, self.OnExit, id=4)
def OnNew(self, event):
self.statusbar.SetStatusText('新建命令')
def OnOpen(self, event):
self.statusbar.SetStatusText('打开命令')
def OnSave(self, event):
self.statusbar.SetStatusText('保存命令')
def OnExit(self, event):
self.statusbar.SetStatusText('退出命令')
class MyApp(wx.App):
def OnInit(self):
frame = MyToolBar(None, -1, 'toolbar.py')
frame.Show(True)
return True
app = MyApp(0)
app.MainLoop()
wx.BoxSizer 将会在后面的布局章节进行介绍. 工具栏部件可通过三步得以创建.
首先,我们创建一个工具栏对象.
toolbar = wx.ToolBar(self, -1, style=wx.TB_HORIZONTAL | wx.NO_BORDER)
接着我们要通过 AddSimleTool() 方法将一些工具按钮添加到工具栏中. 在参考书中你是找不到这个方法的. 它是一个 wxPython“扩展”. 这既是好事同时也有坏处. 这些扩展令到 python 编程更为容易. 但另一方面,它们又都没有良好的文档. 你毋须去看封装代码、演示实例或在邮件列表上问其他人.
toolbar.AddSimpleTool(1, wx.Image('./icons/stock_new.png',
wx.BITMAP_TYPE_PNG).ConvertToBitmap(),
'新建', '')
最后,我们调用了Realize() 方法. 此方法将该工具栏部件呈现或渲染出来.
toolbar.Realize()
工具栏部件有着好几个事件处理器. 在你点击一个工具栏图标时,一个 wx.EVT_COMMAND_TOOL_CLICKED 事件就产生了. 通过 wx.EVT_TOOL 处理器,我们将此事件绑定到一个特定的方法.
为了给这些事件显示处一些有意义的输出,我们建立了一个状态栏.
self.statusbar = self.CreateStatusBar()
这又是另一个 wxPython 扩展. 如此一来,在我们点击一个工具栏按钮时,状态栏上就会显示出一条消息. 这是通过 SetStatusText() 方法实现的.
图:toolbar.py