wxPython - ToolBar 工具栏类

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

如果wx.Toolbar对象的样式参数设置为wx.TB_DOCKABLE,它就变成可停靠的。 还可以使用 wxPython 的 AUIToolBar 类构造浮动工具栏。

不带任何参数的构造函数放置一个带有默认参数的工具栏。 可以将附加参数传递给 wx.ToolBar 类构造函数,如下所示 −

Wx.ToolBar(parent, id, pos, size, style)

为wx.ToolBar定义的 style 样式参数包括以下常量 −

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 类有以下有用的方法 −

S.N. 方法与说明
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() 方法,添加了两个带有"new"和"save"图标的工具。

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() 

以上代码产生如下输出 −

工具栏输出

❮ wxPython 主要类