wxPython 工具栏类
通常在顶级框架的菜单栏下方放置一个或多个水平条状的工具栏,其中包含有文本标题或图标的按钮。
如果 wx.Toolbar 对象的 style 参数设置为 wx.TB_DOCKABLE,则该工具栏可停靠。也可以使用 wxPython 的 AUIToolBar 类构建一个浮动工具栏。
构造函数没有任何参数时会使用默认参数创建一个工具栏。可以通过以下方式向 wx.ToolBar 类的构造函数传递额外的参数 −
Wx.ToolBar(parent, id, pos, size, style)
为wx.ToolBar定义的样式参数包括以下常量:
以下是wx.ToolBar的最常用参数。
序号 | 参数和描述 |
---|---|
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类具有以下有用的方法。
下面是wx.ToolBar最常用的方法。
序号 | 方法及描述 |
---|---|
1 | AddTool() 向工具栏添加一个工具按钮。工具的类型由kind参数指定。 |
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)
parent参数是将按钮添加到的工具栏。图标由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)
各自的事件处理程序的append方法处理事件源。当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()
上述代码产生以下输出 –