Search code examples
user-interfaceiconswxpython

'wxPython' ID icons not showing


I am learning wxPython. I was taught that when you use various id's on your menus such as ID_EXIT, ID_NEW, ID_UNDO etc it would put a name and ICON on the menu. But unfortunately, icons not showing in WINDOWS. And I assume that it works only in linux.

Is there any other way to do this? Where can I find some icon packs to continue my learning in wxpython? As I can't use those id icons, I wanted to set them manually with SetBitmap. But as I don't have any icons at all, I also can't do this.


Solution

  • Here is a simple example to add images to your menu items. I have used SetBitmap() to add the images to a menu item. Download the Exit-icon.png file from here and put it in the same directory where the script resides.

    import wx
    
    class GUI(wx.Frame):
        def __init__(self, parent, id, title):
            screenWidth = 500
            screenHeight = 400
            screenSize = (screenWidth,screenHeight)
            wx.Frame.__init__(self, None, id, title, size=screenSize)
            myMenuBar = wx.MenuBar()
            file = wx.Menu()
            quit = wx.MenuItem(file, 101, '&Quit\tCtrl+Q', 'Quit the Application')
            # Adding an image to the quit menu item
            quit.SetBitmap(wx.Image('Exit-icon.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap())
            file.AppendItem(quit)
            file.AppendSeparator()
            myMenuBar.Append(file, '&File')
            self.SetMenuBar(myMenuBar)
    
    if __name__=='__main__':
        app = wx.App(False)
        frame = GUI(parent=None, id=-1, title="Problem Demo-PSS")
        frame.Show()
        app.MainLoop()
    

    Edit: Mr. wxPython commented regarding the icon packs:

    wxPython also includes a small set of stock icons. See the docs and demos for wx.ArtProvider.

    Regarding the icons pack you should prefer to use .png files and you can find a lot of free stuff on the internet. There is also a standard size format of the icons depending on the OS. For eg., I got the following table from here:

    OS          Icon format Size 
    
    Windows     16x16, 24x24, 32x32, 48x48, 256x256
    Mac OS X    16x16, 32x32, 64x64, 128x128, 256x256, 512x512, 1024x1024
    Linux       16x16, 24x24, 48x48, and 96x96
    iOS 6       29x29, 50x50, 57x57, 58x58, 72x72, 100x100, 114x114, 144x144, 1024x1024
    iOS 7       29x29, 40x40, 58x58, 60x60, 76x76, 80x80, 120x120, 152x152, 1024x1024
    Android     36x36, 48x48, 72x72, 96x96, 512x512
    Windows Phone   62x62, 99x99, 173x173, 200x200
    

    Update: You can find icon packs here for an example. Use the search option:

    Exit icon http://findicons.com/search/exit

    Undo icon http://findicons.com/search/undo

    Redo icon http://findicons.com/search/redo

    Simply click on any icon a new page opens and then click on download png button. Also you can simply rename the icon file even if it is not named a Exit/Undo/Redo. :)