Version 0 of Icons and Menus

Updated 2013-06-17 20:08:37 by Zipguy

ZipGuy 2013-Jun 17: - You can find out my email address by clicking on Zipguy.

I just managed to find the right code to add an Icon to a menu. It was hard to find this option, in the many, many commands within Tk. Here's an example of how to get it to look, like this:

http://www.geocities.ws/thezipguy/misc/ml125j_modified_file_menu.png

How did I do this? It's real easy, once you know the subcommand of Tk menus. The subcommand is "-compound left" combined with an "-image imagename" that you've already defined. When coded, it should look like this...

        # menuicon.tcl
        # ---------------
        # Written to show how you can use Icons with Menus, by Zipguy.
        # ---------------
        # This program is free software; you can redistribute it and/or
        # modify it under the terms of the GNU General Public License
        # as published by the Free Software Foundation; either version 2
        # of the License, or (at your option) any later version.
        #
        # This program is distributed in the hope that it will be useful,
        # but WITHOUT ANY WARRANTY; without even the implied warranty of
        # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        # GNU General Public License for more details.
        #
        # create the main window menus
        
        image create photo fileopen-16 -data {
           R0lGODlhEAAQAIMAAPwCBASCBMyaBPzynPz6nJxmBPzunPz2nPz+nPzSBPzqnPzmnPzinPzenAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARTEMhJq724hp1n8MDXeaJgYtsnDANhvkJRCcZxEEiOJDIlKLWDbtebCBaGGmwZEzCQKxxCSgQ4Gb/BbciTCBpOoFbX9X6fChYhUZYU3vB4cXTxRwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==
        }
        image create photo filesave-16 -data {
           R0lGODlhEAAQAIQAAPwCBFRShGRmzPT6/Oz2/OTy/Nzu/NTm/AQCBMTi/Lze/Mzm/KzW/NTq/LTa/AQCxOTi5Nze3Nza3MzOzLy+xNTS1MTGxMzKzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVkICCOZCkGaKqqpxAMRFEYRx0gQfvGRZ0oKZ2MdlgogC6doVc8MgJJADRQaxidU13t8HMwnlGoa4UShM2PtFp9fkAikomcQnm0IebKxGKp3/MTF3R2OVICboB7foVSZGQmkCR+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7
        }
        wm title . "Menu with Icon"
        wm minsize . 300 0
        menu .menu -tearoff 0
        # add the "file" menu
        set m .menu.file
        menu $m -tearoff 0
        .menu add cascade -label "File" -menu $m -underline 0
        $m add command -label "New" -command "# some command"  -underline 0 
        $m add command -label "Open" -command "# some command" -underline 0 \
                -image                 fileopen-16   -compound left
        $m add command -label "Save" -command "# some command" -underline 0 \
                -accelerator Ctrl+S\
                -image                 filesave-16   -compound left
        $m add command -label "Exit" -underline 1 -command "exit;WriteIni;exit"
        . configure -menu .menu

"image create photo new16 -data {" defines the image,
"-image new16 -compound left" combines the image with the menu item.

Do you get it now? If you don't believe it (and IF you have tcl installed), you can download the code above, save it as menuicon.tcl, run it, and it should look like this:

http://www.geocities.ws/thezipguy/misc/menuicon.png

You can look at the code and get to understand what it does.

What is the Image command? What is that code that makes a photo?

You will need to understand how base64 works if you have the source (for you photo) in your source code, like I do here.,

You can see the image command in you help files, if you've installed Tcl/Tk, or you can look at it at image, [http://www.tcl.tk/man/tcl8.4/TkCmd/image.htm , or you can do a search on 'image' on the left of this screen.

Here is an extemely interesting program which does Creating image photo data from GIF files. I have a modified version of it, in progress so far, which I plan to improve further.