wxPython – 工具条类
一个或多个由带有文字说明或图标的按钮组成的水平条状工具条通常被放置在顶层框架的MenuBar下面。
如果 wx.Toolbar 对象的样式参数被设置为wx.TB_DOCKABLE,它就成为可停靠的。浮动工具条也可以使用wxPython的AUIToolBar类来构造。
没有任何参数的构造器会放置一个具有默认参数的工具栏。额外的参数可以传递给wx.ToolBar类构造函数,如下所示
Wx.ToolBar(parent, id, pos, size, style)
为wx.ToolBar定义的风格参数包括以下常量 −
下面给出的是wx.ToolBar最常用的参数。 S.N. | 参数和描述 |
---|---|
1 | wx.TB_FLAT 给予工具条一个平面的外观 |
2 | wx.TB_HORIZONTAL 指定水平布局(默认)。 |
3 | wxTB_VERTICAL 指定垂直布局 |
4 | wx.TB_DEFAULT_STYLE 结合wxTB_FLAT和wxTB_HORIZONTAL |
5 | wx.TB_DOCKABLE 使工具条可浮动并可停靠 |
6 | wx.TB_NO_TOOLTIPS 当鼠标悬停在工具上时,不显示工具的简短帮助提示。 |
7 | wx.TB_NOICONS 指定在工具栏按钮中不显示图标;默认情况下,会显示这些图标。 |
8 | wx.TB_TEXT 在工具栏按钮中显示文本;默认情况下只显示图标。 |
不同功能的工具按钮可以被添加到工具栏中。Wx.ToolBar class has the following useful methods −
下面给出的是wx.ToolBar最常用的方法。 S.N. | 方法和描述 |
---|---|
1 | AddTool() 在工具栏上添加一个工具按钮。工具的类型由种类参数指定。 |
2 | AddRadioTool() 添加一个属于相互排斥的按钮组的按钮。 |
3 | AddCheckTool() 在工具栏上添加一个切换按钮。 |
4 | AddLabelTool() 添加一个有图标和标签的工具 |
5 | AddSeparator() 添加一个分隔符来表示工具按钮组。 |
6 | AddControl() 添加任何控件到工具栏。例如,wx.Button,wx.Combobox,等等。 |
7 | ClearTools() 删除工具栏上的所有按钮 |
8 | RemoveTool() 删除工具栏上的工具按钮 |
9 | Realize() 应该在添加工具按钮后调用。 |
AddTool()方法至少需要三个参数,即
AddTool(parent, id, bitmap)
父参数是添加该按钮的工具条。图像图标由位图参数指定。
一般的工具按钮会发出EVT_TOOL事件。其他控件如果被添加到工具栏中,必须通过各自的CommandEvent绑定器绑定到事件处理程序。
例子
在下面的例子中,工具栏显示了两个普通工具按钮、三个单选工具按钮和一个组合框。
首先,工具条对象被激活。
tb = wx.ToolBar( self, -1 )
self.ToolBar = tb
使用AddTool()方法,两个带有 “新建 “和 “保存 “图标的工具被添加。
tb.AddTool( 101, wx.Bitmap("new.png") )
tb.AddTool(102,wx.Bitmap("save.png"))
然后,一组RadioTools被添加到工具栏,每次只能选择其中一个。
right = tb.AddRadioTool(222,wx.Bitmap("right.png"))
center = tb.AddRadioTool(333,wx.Bitmap("center.png"))
justify = tb.AddRadioTool(444,wx.Bitmap("justify.png"))
现在使用AddControl()方法将一个wx.ComboBox控件添加到工具条上。组合框列表包含字体的名称。
self.combo = wx.ComboBox(tb, 555, value = "Times", choices = ["Arial","Times","Courier"])
为了最终完成工具栏的构建,需要调用Realize()方法。
tb.Realize()
最后,注册了工具栏和组合框的事件绑定器。
tb.Bind(wx.EVT_TOOL, self.Onright)
tb.Bind(wx.EVT_COMBOBOX,self.OnCombo)
各自的事件处理程序的追加方法处理事件源。当EVT_TOOL事件的ID显示在工具栏下面的文本框中时,当EVT_COMBOBOX事件触发时,选定的字体名称会被添加到其中。
def Onright(self, event):
self.text.AppendText(str(event.GetId())+"\n")
def OnCombo(self,event):
self.text.AppendText( self.combo.GetValue()+"\n")
整个代码如下-
import wx
class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title)
self.InitUI()
def InitUI(self):
menubar = wx.MenuBar()
menu = wx.Menu()
menubar.Append(menu,"File")
self.SetMenuBar(menubar)
tb = wx.ToolBar( self, -1 )
self.ToolBar = tb
tb.AddTool( 101, wx.Bitmap("new.png") )
tb.AddTool(102,wx.Bitmap("save.png"))
right = tb.AddRadioTool(222,wx.Bitmap("right.png"))
center = tb.AddRadioTool(333,wx.Bitmap("center.png"))
justify = tb.AddRadioTool(444,wx.Bitmap("justify.png"))
tb.Bind(wx.EVT_TOOL, self.Onright)
tb.Bind(wx.EVT_COMBOBOX,self.OnCombo)
self.combo = wx.ComboBox( tb, 555, value = "Times", choices = ["Arial","Times","Courier"])
tb.AddControl(self.combo )
tb.Realize()
self.SetSize((350, 250))
self.text = wx.TextCtrl(self,-1, style = wx.EXPAND|wx.TE_MULTILINE)
self.Centre()
self.Show(True)
def Onright(self, event):
self.text.AppendText(str(event.GetId())+"\n")
def OnCombo(self,event):
self.text.AppendText( self.combo.GetValue()+"\n")
ex = wx.App()
Mywin(None,'ToolBar demo')
ex.MainLoop()
上述代码产生的输出结果如下 –