py4u blog

Python - CreateToolBar() in wxPython

wxPython is a popular GUI (Graphical User Interface) toolkit for Python. It allows developers to create cross-platform desktop applications. One of the important components in wxPython for creating user-friendly interfaces is the toolbar. The CreateToolBar() method is used to create a toolbar in a wxPython application. In this blog, we'll explore how to use this method effectively, along with common and best practices.

2026-07

Table of Content#

  1. Prerequisites
  2. Basic Usage of CreateToolBar()
  3. Adding Tools to the Toolbar
  4. Customizing Toolbar Appearance
  5. Common Practices
  6. Best Practices
  7. Example Usage
  8. Reference

Prerequisites#

Before we start, make sure you have wxPython installed. If not, you can install it using pip install -U wxPython (for the latest version). Also, have a basic understanding of Python programming and the wxPython framework.

Basic Usage of CreateToolBar()#

In a wxPython application, typically, you'll have a main frame (a subclass of wx.Frame). To create a toolbar, you call the CreateToolBar() method on the frame.

import wx
 
class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, title="Toolbar Example")
        self.toolbar = self.CreateToolBar()
        self.Show()
 
if __name__ == "__main__":
    app = wx.App()
    frame = MyFrame()
    app.MainLoop()

In the above code:

  • We create a custom frame class MyFrame.
  • Inside the __init__ method, we call self.CreateToolBar() which creates a toolbar object and assigns it to the toolbar attribute of the frame.

Adding Tools to the Toolbar#

Once the toolbar is created, you can add tools to it. Tools can be buttons, separators, etc. For example, to add a simple button tool:

import wx
 
class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, title="Toolbar Example")
        self.toolbar = self.CreateToolBar()
        # Add a tool (button)
        tool_id = wx.NewIdRef()
        self.toolbar.AddTool(tool_id, "Tool 1", wx.Bitmap("icon.png"))  # Replace "icon.png" with an actual icon path
        self.toolbar.Realize()  # This makes the toolbar visible
        self.Show()
 
if __name__ == "__main__":
    app = wx.App()
    frame = MyFrame()
    app.MainLoop()

Here:

  • We use wx.NewIdRef() to get a unique ID for the tool.
  • AddTool() method takes the tool ID, a label (which might not be shown depending on the platform and toolbar style), and a bitmap (icon) for the tool.
  • Realize() is called to finalize the toolbar creation and make it visible.

Customizing Toolbar Appearance#

You can customize the appearance of the toolbar in several ways:

  • Style: You can set the style of the toolbar when creating it. For example, wx.TB_HORIZONTAL (default) or wx.TB_VERTICAL for orientation.
self.toolbar = self.CreateToolBar(wx.TB_VERTICAL)
  • Tool Styles: Tools can have different styles like wx.ITEM_NORMAL (default button), wx.ITEM_CHECK (checkable button), etc.
tool_id = wx.NewIdRef()
self.toolbar.AddTool(tool_id, "Check Tool", wx.Bitmap("icon.png"), kind=wx.ITEM_CHECK)

Common Practices#

  • Error Handling: When adding tools, make sure the icons (if used) exist. You can add error handling around the AddTool() call to handle cases where the icon file is missing.
  • Consistent Layout: Arrange tools in a logical order. For example, group related tools together. You can use separators (self.toolbar.AddSeparator()) to divide different sections of the toolbar.

Best Practices#

  • Use Resource Files for Icons: Instead of hardcoding icon paths in the code, use a resource file (like a .rc file in some cases) to manage icons. This makes it easier to change icons across the application.
  • Event Handling: Bind events to the tools. For example, if it's a button tool, bind a click event to perform an action.
import wx
 
class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, title="Toolbar Example")
        self.toolbar = self.CreateToolBar()
        tool_id = wx.NewIdRef()
        self.toolbar.AddTool(tool_id, "Click Me", wx.Bitmap("icon.png"))
        self.toolbar.Realize()
        self.Bind(wx.EVT_TOOL, self.on_tool_click, id=tool_id)
        self.Show()
 
    def on_tool_click(self, event):
        wx.MessageBox("Tool clicked!", "Info")
 
if __name__ == "__main__":
    app = wx.App()
    frame = MyFrame()
    app.MainLoop()

Example Usage#

Here's a more complete example with multiple tools, separators, and event handling:

import wx
 
class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, title="Toolbar Example")
        self.toolbar = self.CreateToolBar()
        # Add tools
        tool_id1 = wx.NewIdRef()
        self.toolbar.AddTool(tool_id1, "Open", wx.Bitmap("open.png"))
        tool_id2 = wx.NewIdRef()
        self.toolbar.AddTool(tool_id2, "Save", wx.Bitmap("save.png"))
        self.toolbar.AddSeparator()
        tool_id3 = wx.NewIdRef()
        self.toolbar.AddTool(tool_id3, "Exit", wx.Bitmap("exit.png"))
        self.toolbar.Realize()
        # Bind events
        self.Bind(wx.EVT_TOOL, self.on_open, id=tool_id1)
        self.Bind(wx.EVT_TOOL, self.on_save, id=tool_id2)
        self.Bind(wx.EVT_TOOL, self.on_exit, id=tool_id3)
        self.Show()
 
    def on_open(self, event):
        wx.MessageBox("Open action!", "Info")
 
    def on_save(self, event):
        wx.MessageBox("Save action!", "Info")
 
    def on_exit(self, event):
        self.Close()
 
if __name__ == "__main__":
    app = wx.App()
    frame = MyFrame()
    app.MainLoop()

Reference#

This blog has covered the basics of using CreateToolBar() in wxPython, along with adding tools, customizing appearance, and best practices. With this knowledge, you can create more interactive and user-friendly toolbars in your wxPython applications.