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