]>
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:])