wxPython - 工具欄類



一個或多個包含帶有文字標題或圖示的按鈕的水平工具欄條通常放置在頂級框架的選單欄正下方。

如果wx.Toolbar物件的style引數設定為wx.TB_DOCKABLE,則它變為可停靠的。也可以使用wxPython的AUIToolBar類構建浮動工具欄。

不帶任何引數的建構函式會建立一個具有預設引數的工具欄。可以按如下方式將附加引數傳遞給wx.ToolBar類建構函式:

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

為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類具有以下有用的方法:

序號 方法及說明
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)

父引數是新增按鈕的工具欄。影像圖示由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() 

以上程式碼產生以下輸出:

ToolBar Output
wxpython_major_classes.htm
廣告
© . All rights reserved.