Bitmaps

For some widgets you need to specify one or more bitmaps. There are several options how to do this:
  • from a bitmap file
  • from a named variable: statement “var:”
  • empty bitmap: statement “empty:”
  • from wxArtProvider: statement “art:”
  • from literal code: statement “code:”

From Bitmap File / Path

Specify the absolute or relative path to the bitmap file.

For an absolute path, you may use the file dialog by clicking the button “…”.

You may drag a file to the field. If the file is located below the project file’s directory, the relative path will be entered. For the absolute path just hold the Alt or Ctrl key.

Sometimes, depending on your runtime environment, you may have to customize the loading of the bitmap files. See below for an example.

Example
/usr/share/icons/application.png

BitmapPath

Created code
C++
wxBitmap("/usr/share/icons/application.png", wxBITMAP_TYPE_ANY)

From named variable: Statement var

Syntax
var:<variable name>
Example
var:my_bitmap_path
Created code
C++
wxBitmap(my_bitmap_path, wxBITMAP_TYPE_ANY)

Empty Bitmap: Statement empty

Creates an empty bitmap of the specified size (min. 1,1)

Syntax
empty:<width>,<height>
Example
empty:32,32
Created code
C++
wx.EmptyBitmap(32, 32)

Python
wxBitmap(32, 32)

From wxArtProvider: Statement art

Create a bitmap using wxArtProvider.

See https://docs.wxpython.org/wx.ArtProvider.html for usage of wxArtProvider.

Syntax
art:<ArtID>,<ArtClient>

or:

art:<ArtID>,<ArtClient>,<width>,<height>
Example
art:wxART_GO_UP,wxART_OTHER,32,32
Created code
Perl
Wx::ArtProvider::GetBitmap(wxART_GO_UP, wxART_OTHER, Wx::Size->new(32, 32))

From Code: Statement code

This just inserts the given code.

Syntax
code:<code chunk to return a wxBitmap>
Example
code:if (x == 0) get_bitmap1() else get_bitmap2();
Created code
C++
if (x == 0) get_bitmap1() else get_bitmap2();

Customizing Bitmap loading

If at runtime the image files are at a non-standard location, you need to customize the loading of image files such that the files will be found.

For example, if you use PyInstaller to create a single-file executable, then the bitmaps need to be loaded from a temporary directory sys._MEIPASS.

This example code would replace wx.Bitmap with an implementation that is aware of this remapping:

import wx
import sys, os

# taken from stackoverflow re accessing data files within pyinstaller bundle.
def resource_path(relative_path):
    "Get absolute path to resource, works for dev and for PyInstaller."
    base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
    return os.path.join(base_path, relative_path)

# get a reference to original wx.Bitmap (just in case)
wxBitmap = wx.Bitmap

# customised wx.Bitmap, which obtains the location of the bitmap
# using the `resource_path` function above.
class MyBitmap(wxBitmap):
    def __init__(self, *args, **kwargs):
        try:
            kwargs['name'] = resource_path(kwargs['name'])
        except KeyError:
            args = list(args)
            args[0] = resource_path(args[0])
        # call original wx.Bitmap
        wxBitmap.__init__(self, *args, **kwargs)

# Remap wx.Bitmap to our customised version.
wx.Bitmap = MyBitmap

(Courtesy of Brendan Simon)