• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1from Tkinter import *
2
3# some vocabulary to keep from getting confused. This terminology
4# is something I cooked up for this file, but follows the man pages
5# pretty closely
6#
7#
8#
9#       This is a MENUBUTTON
10#       V
11# +-------------+
12# |             |
13#
14# +------------++------------++------------+
15# |            ||            ||            |
16# |  File      ||  Edit      || Options    |   <-------- the MENUBAR
17# |            ||            ||            |
18# +------------++------------++------------+
19# | New...         |
20# | Open...        |
21# | Print          |
22# |                |  <------ This is a MENU. The lines of text in the menu are
23# |                |                          MENU ENTRIES
24# |                +---------------+
25# | Open Files >   | file1         |
26# |                | file2         |
27# |                | another file  | <------ this cascading part is also a MENU
28# +----------------|               |
29#                  |               |
30#                  |               |
31#                  |               |
32#                  +---------------+
33
34
35
36def new_file():
37    print "opening new file"
38
39
40def open_file():
41    print "opening OLD file"
42
43
44def makeFileMenu():
45    # make menu button : "File"
46    File_button = Menubutton(mBar, text='File', underline=0)
47    File_button.pack(side=LEFT, padx="1m")
48    File_button.menu = Menu(File_button)
49
50    # add an item. The first param is a menu entry type,
51    # must be one of: "cascade", "checkbutton", "command", "radiobutton", "separator"
52    # see menu-demo-2.py for examples of use
53    File_button.menu.add_command(label='New...', underline=0,
54                                 command=new_file)
55
56
57    File_button.menu.add_command(label='Open...', underline=0,
58                                 command=open_file)
59
60    File_button.menu.add_command(label='Quit', underline=0,
61                                 command='exit')
62
63    # set up a pointer from the file menubutton back to the file menu
64    File_button['menu'] = File_button.menu
65
66    return File_button
67
68
69
70def makeEditMenu():
71    Edit_button = Menubutton(mBar, text='Edit', underline=0)
72    Edit_button.pack(side=LEFT, padx="1m")
73    Edit_button.menu = Menu(Edit_button)
74
75    # just to be cute, let's disable the undo option:
76    Edit_button.menu.add('command', label="Undo")
77    # Since the tear-off bar is the 0th entry,
78    # undo is the 1st entry...
79    Edit_button.menu.entryconfig(1, state=DISABLED)
80
81    # and these are just for show. No "command" callbacks attached.
82    Edit_button.menu.add_command(label="Cut")
83    Edit_button.menu.add_command(label="Copy")
84    Edit_button.menu.add_command(label="Paste")
85
86    # set up a pointer from the file menubutton back to the file menu
87    Edit_button['menu'] = Edit_button.menu
88
89    return Edit_button
90
91
92#################################################
93
94#### Main starts here ...
95root = Tk()
96
97
98# make a menu bar
99mBar = Frame(root, relief=RAISED, borderwidth=2)
100mBar.pack(fill=X)
101
102File_button = makeFileMenu()
103Edit_button = makeEditMenu()
104
105# finally, install the buttons in the menu bar.
106# This allows for scanning from one menubutton to the next.
107mBar.tk_menuBar(File_button, Edit_button)
108
109root.title('menu demo')
110root.iconname('packer')
111
112root.mainloop()
113