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