11 wxPython ToolBar类


包括具有文本标题或图标的按钮的一个或多个水平条带工具栏通常位于顶层框架中的MenuBar的正下方。

如果 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参数是添加按钮的工具栏。图标图标由位图参数指定。

常规工具按钮会发出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()

上面的代码产生以下输出

工具栏输出