]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/ToolBar.py
   6 TBFLAGS 
= ( wx
.TB_HORIZONTAL
 
  13 #--------------------------------------------------------------------------- 
  15 class TestSearchCtrl(wx
.SearchCtrl
): 
  18     def __init__(self
, parent
, id=-1, value
="", 
  19                  pos
=wx
.DefaultPosition
, size
=wx
.DefaultSize
, style
=0, 
  21         style |
= wx
.TE_PROCESS_ENTER
 
  22         wx
.SearchCtrl
.__init
__(self
, parent
, id, value
, pos
, size
, style
) 
  23         self
.Bind(wx
.EVT_TEXT_ENTER
, self
.OnTextEntered
) 
  24         self
.Bind(wx
.EVT_MENU_RANGE
, self
.OnMenuItem
, id=1, id2
=self
.maxSearches
) 
  25         self
.doSearch 
= doSearch
 
  28     def OnTextEntered(self
, evt
): 
  29         text 
= self
.GetValue() 
  30         if self
.doSearch(text
): 
  31             self
.searches
.append(text
) 
  32             if len(self
.searches
) > self
.maxSearches
: 
  34             self
.SetMenu(self
.MakeMenu())             
  37     def OnMenuItem(self
, evt
): 
  38         text 
= self
.searches
[evt
.GetId()-1] 
  43         item 
= menu
.Append(-1, "Recent Searches") 
  45         for idx
, txt 
in enumerate(self
.searches
): 
  46             menu
.Append(1+idx
, txt
) 
  51 class TestToolBar(wx
.Frame
): 
  52     def __init__(self
, parent
, log
): 
  53         wx
.Frame
.__init
__(self
, parent
, -1, 'Test ToolBar', size
=(600, 400)) 
  56         self
.Bind(wx
.EVT_CLOSE
, self
.OnCloseWindow
) 
  58         client 
= wx
.Panel(self
) 
  59         client
.SetBackgroundColour(wx
.NamedColour("WHITE")) 
  62             # Use the wxFrame internals to create the toolbar and 
  63             # associate it all in one tidy method call.  By using 
  64             # CreateToolBar or SetToolBar the "client area" of the 
  65             # frame will be adjusted to exclude the toolbar. 
  66             tb 
= self
.CreateToolBar( TBFLAGS 
) 
  68             # Here's a 'simple' toolbar example, and how to bind it using SetToolBar() 
  69             #tb = wx.ToolBarSimple(self, -1, wx.DefaultPosition, wx.DefaultSize, 
  70             #               wx.TB_HORIZONTAL | wx.NO_BORDER | wx.TB_FLAT) 
  72             # But we're doing it a different way here. 
  75             # The toolbar can also be a child of another widget, and 
  76             # be managed by a sizer, although there may be some 
  77             # implications of doing this on some platforms. 
  78             tb 
= wx
.ToolBar(client
, style
=TBFLAGS
) 
  79             sizer 
= wx
.BoxSizer(wx
.VERTICAL
) 
  80             sizer
.Add(tb
, 0, wx
.EXPAND
) 
  81             client
.SetSizer(sizer
) 
  84         log
.write("Default toolbar tool size: %s\n" % tb
.GetToolBitmapSize()) 
  86         self
.CreateStatusBar() 
  89         new_bmp 
=  wx
.ArtProvider
.GetBitmap(wx
.ART_NEW
, wx
.ART_TOOLBAR
, tsize
) 
  90         open_bmp 
= wx
.ArtProvider
.GetBitmap(wx
.ART_FILE_OPEN
, wx
.ART_TOOLBAR
, tsize
) 
  91         copy_bmp 
= wx
.ArtProvider
.GetBitmap(wx
.ART_COPY
, wx
.ART_TOOLBAR
, tsize
) 
  92         paste_bmp
= wx
.ArtProvider
.GetBitmap(wx
.ART_PASTE
, wx
.ART_TOOLBAR
, tsize
) 
  94         tb
.SetToolBitmapSize(tsize
) 
  96         #tb.AddSimpleTool(10, new_bmp, "New", "Long help for 'New'") 
  97         tb
.AddLabelTool(10, "New", new_bmp
, shortHelp
="New", longHelp
="Long help for 'New'") 
  98         self
.Bind(wx
.EVT_TOOL
, self
.OnToolClick
, id=10) 
  99         self
.Bind(wx
.EVT_TOOL_RCLICKED
, self
.OnToolRClick
, id=10) 
 101         #tb.AddSimpleTool(20, open_bmp, "Open", "Long help for 'Open'") 
 102         tb
.AddLabelTool(20, "Open", open_bmp
, shortHelp
="Open", longHelp
="Long help for 'Open'") 
 103         self
.Bind(wx
.EVT_TOOL
, self
.OnToolClick
, id=20) 
 104         self
.Bind(wx
.EVT_TOOL_RCLICKED
, self
.OnToolRClick
, id=20) 
 107         tb
.AddSimpleTool(30, copy_bmp
, "Copy", "Long help for 'Copy'") 
 108         self
.Bind(wx
.EVT_TOOL
, self
.OnToolClick
, id=30) 
 109         self
.Bind(wx
.EVT_TOOL_RCLICKED
, self
.OnToolRClick
, id=30) 
 111         tb
.AddSimpleTool(40, paste_bmp
, "Paste", "Long help for 'Paste'") 
 112         self
.Bind(wx
.EVT_TOOL
, self
.OnToolClick
, id=40) 
 113         self
.Bind(wx
.EVT_TOOL_RCLICKED
, self
.OnToolRClick
, id=40) 
 117         #tool = tb.AddCheckTool(50, images.getTog1Bitmap(), shortHelp="Toggle this") 
 118         tool 
= tb
.AddCheckLabelTool(50, "Checkable", images
.getTog1Bitmap(), 
 119                                     shortHelp
="Toggle this") 
 120         self
.Bind(wx
.EVT_TOOL
, self
.OnToolClick
, id=50) 
 122         self
.Bind(wx
.EVT_TOOL_ENTER
, self
.OnToolEnter
) 
 123         self
.Bind(wx
.EVT_TOOL_RCLICKED
, self
.OnToolRClick
) # Match all 
 124         self
.Bind(wx
.EVT_TIMER
, self
.OnClearSB
) 
 131                 tb
, cbID
, "", choices
=["", "This", "is a", "wx.ComboBox"], 
 132                 size
=(150,-1), style
=wx
.CB_DROPDOWN
 
 134         self
.Bind(wx
.EVT_COMBOBOX
, self
.OnCombo
, id=cbID
) 
 137         search 
= TestSearchCtrl(tb
, size
=(150,-1), doSearch
=self
.DoSearch
) 
 138         tb
.AddControl(search
) 
 140         # Final thing to do for a toolbar is call the Realize() method. This 
 141         # causes it to render (more or less, that is). 
 145     def DoSearch(self
,  text
): 
 146         # called by TestSearchCtrl 
 147         self
.log
.WriteText("DoSearch: %s\n" % text
) 
 148         # return true to tell the search ctrl to remember the text 
 152     def OnToolClick(self
, event
): 
 153         self
.log
.WriteText("tool %s clicked\n" % event
.GetId()) 
 154         #tb = self.GetToolBar() 
 155         tb 
= event
.GetEventObject() 
 156         tb
.EnableTool(10, not tb
.GetToolEnabled(10)) 
 158     def OnToolRClick(self
, event
): 
 159         self
.log
.WriteText("tool %s right-clicked\n" % event
.GetId()) 
 161     def OnCombo(self
, event
): 
 162         self
.log
.WriteText("combobox item selected: %s\n" % event
.GetString()) 
 164     def OnToolEnter(self
, event
): 
 165         self
.log
.WriteText('OnToolEnter: %s, %s\n' % (event
.GetId(), event
.GetInt())) 
 167         if self
.timer 
is None: 
 168             self
.timer 
= wx
.Timer(self
) 
 170         if self
.timer
.IsRunning(): 
 173         self
.timer
.Start(2000) 
 177     def OnClearSB(self
, event
):  # called for the timer event handler 
 178         self
.SetStatusText("") 
 183     def OnCloseWindow(self
, event
): 
 184         if self
.timer 
is not None: 
 189 #--------------------------------------------------------------------------- 
 191 class TestPanel(wx
.Panel
): 
 192     def __init__(self
, parent
, log
): 
 194         wx
.Panel
.__init
__(self
, parent
, -1) 
 196         b 
= wx
.Button(self
, -1, "Show the ToolBar sample", (50,50)) 
 197         self
.Bind(wx
.EVT_BUTTON
, self
.OnButton
, b
) 
 200     def OnButton(self
, evt
): 
 201         win 
= TestToolBar(self
, self
.log
) 
 206 #--------------------------------------------------------------------------- 
 209 def runTest(frame
, nb
, log
): 
 210     win 
= TestPanel(nb
, log
) 
 213 #--------------------------------------------------------------------------- 
 219 wx.ToolBar is a narrow strip of icons on one side of a frame (top, bottom, sides) 
 220 that acts much like a menu does, except it is always visible. Additionally, actual 
 221 wxWindows controls, such as wx.TextCtrl or wx.ComboBox, can be added to the toolbar 
 222 and used from within it. 
 224 Toolbar creation is a two-step process. First, the toolbar is defined using the 
 225 various Add* methods of wx.ToolBar. Once all is set up, then wx.Toolbar.Realize() 
 226 must be called to render it. 
 228 wx.Toolbar events are also propogated as Menu events; this is especially handy when 
 229 you have a menu bar that contains items that carry out the same function. For example, 
 230 it is not uncommon to have a little 'floppy' toolbar icon to 'save' the current file  
 231 (whatever it is) as well as a FILE/SAVE menu item that does the same thing. In this 
 232 case, both events can be captured and acted upon using the same event handler 
 235 If there are cases where a toolbar icon should *not* be associated with a menu item, 
 236 use a unique ID to trap it. 
 238 There are a number of ways to create a toolbar for a wx.Frame. wx.Frame.CreateToolBar()  
 239 does all the work except it adds no buttons at all unless you override the virtual method 
 240 OnCreateToolBar(). On the other hand, you can just subclass wx.ToolBar and then use 
 241 wx.Frame.SetToolBar() instead. 
 243 Note that wx.TB_DOCKABLE is only supported under GTK. An attempt to alleviate this 
 244 is provided in wx.lib.floatbar, but it is not formally supported. 
 248 if __name__ 
== '__main__': 
 251     run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])