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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
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,
Pack: {'side': 'left',
'padx': '1m'}})
# make the pulldown part of the File menu. The parameter passed is the master.
# we attach it to the File button as a python attribute called "menu" by convention.
# hopefully this isn't too confusing...
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", "seperator"
# 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,
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"} )
# undo is the 0th entry...
Edit_button.menu.entryconfig(0, {"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',
'bd': 2,
Pack: {'side': 'top',
'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()
|