Python Tkinter Menu

This Article covers the use of a Menu in Tkinter Python.

What is the Python Tkinter Menu?

The Python Tkinter Menu widget is used to create various types of menus in the GUI such as top-level menus, which are displayed right under the title bar of the parent window.


menu = Menu(master, options..........)   

Fair warning before you proceed any further. Creating a fully fledged menu for your GUI application is considerably harder than the average widget due to the sheer size. A Tkinter Menu can be thought as a collection of many other widgets bundled into one.

The plus side is that using Menu’s properly in your GUI application significantly improves the functionality and makes it seem professional.

Menu Options:

A list of the most relevant options in Tkinter Menu’s.

1activebackground Color of the background when widget is under focus.
2activeforeground Color of the foreground when widget in under focus.
3bg Background color for the area around the widget.
4bd Size of the border around the widget. Default value is 2 pixels.
5cursor When the mouse is hovering over this widget, it can be changed to a special cursor type like an arrow or dot.
6disabledforeground Color of text for DISABLED items.
7font The type of font to be used for this widget.
8fg The color for the text.
9image Used to display an image
10postcommand procedure to be called when menu is brought up.
11reliefIt specifies the type of the border. Default is Flat, other options include RAISED and SUNKEN.

Tkinter Menu Functions

A list of the most relevant Functions in Tkinter Menu’s.

1add_command(options) Adds menu items to the Menu.
2add_radiobutton(options) Adds a radio button item to the Menu
3add_checkbutton(options) Adds a Check Button item to the Menu.
4 add_cascade(options) Used to introduce hierarchy into the Menu.
5 add_separator() Adds a separator line in the menu to partition items.
6 add(type, options) Adds an item of a specified type to the Menu.
7 index(item) Returns the index of a specified Menu item.

Tkinter Menu Example 1.

The following example uses a simple menu approach (without any hierarchy).

We’ve created three menu options here, Save, Load and Exit. The Save and Load procedures are linked to dummy functions for the purpose of this code. The Exit button calls the root.destroy command which destroys the Tkinter process.

Finally, we use the root.config to assign our menu object as the menu for the root tkinter window. Remember, you menu will not displayed unless it has been assigned to a window.

from tkinter import *

def save():
    #Code to be written

def load():
    #Code to be written

root = Tk()
frame = Frame(root)

mainmenu = Menu(frame)
mainmenu.add_command(label = "Save", command= save)  
mainmenu.add_command(label = "Load", command= load)
mainmenu.add_command(label = "Exit", command= root.destroy)

root.config(menu = mainmenu)

Python Tkinter Menu

Tkinter Menu Example 2.

In this example, we use a hierarchical approach. This approach allows for drop down menu’s within your menu. Think of it as Nested Menu, where we have one main menu, which further contains 2 or more menus. We use the add_cascade to achieve this.

To keep the code size small and since this is only a demonstration, all commands lead back to an empty procedure. Furthermore, you should keep the value of tearoff equal to 0. This prevents the menu from being “torn off” into a new window. Most of you will not want this to show as it doesn’t look good visually.

Note the trend of values that the parameter master has taken. The main menu links to root, while the three Sub Menu’s link back to the Main menu.

from tkinter import *

def emptyfunc():
    #Code to be written

root = Tk()

# Main Menu
mainmenu = Menu(root)

# Menu 1
filemenu = Menu(mainmenu, tearoff = 0)
filemenu.add_command(label = "Open", command = emptyfunc)
filemenu.add_command(label = "Save", command = emptyfunc)
filemenu.add_command(label = "Exit", command = root.destroy)
mainmenu.add_cascade(label="File", menu=filemenu)

# Menu 2
toolmenu = Menu(mainmenu, tearoff = 0)
toolmenu.add_command(label = "Find", command = emptyfunc)
toolmenu.add_command(label = "Debugger", command = emptyfunc)
toolmenu.add_command(label = "Replace", command = emptyfunc)
mainmenu.add_cascade(label="Tools", menu=toolmenu)

# Menu 3
helpmenu = Menu(mainmenu, tearoff = 0)
helpmenu.add_command(label = "Documentation", command = emptyfunc)
mainmenu.add_cascade(label = "Help", menu = helpmenu)

root.config(menu = mainmenu)
Python Tkinter Menu

This marks the end of our Python Tkinter Menu Article. You should head over to the Python Menu Button Article next. It explores the concept of putting a menu in a button. Most of the syntax remains the same. There are also further examples of using check buttons and radio buttons in menu’s in that article.

You can head back to the main Tkinter article using this link.

Notify of
Newest Most Voted
Inline Feedbacks
View all comments