|
1 from 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 |
|
36 def new_file(): |
|
37 print "opening new file" |
|
38 |
|
39 |
|
40 def open_file(): |
|
41 print "opening OLD file" |
|
42 |
|
43 |
|
44 def 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", "seperator" |
|
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 |
|
70 def 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 ... |
|
95 root = Tk() |
|
96 |
|
97 |
|
98 # make a menu bar |
|
99 mBar = Frame(root, relief=RAISED, borderwidth=2) |
|
100 mBar.pack(fill=X) |
|
101 |
|
102 File_button = makeFileMenu() |
|
103 Edit_button = makeEditMenu() |
|
104 |
|
105 # finally, install the buttons in the menu bar. |
|
106 # This allows for scanning from one menubutton to the next. |
|
107 mBar.tk_menuBar(File_button, Edit_button) |
|
108 |
|
109 root.title('menu demo') |
|
110 root.iconname('packer') |
|
111 |
|
112 root.mainloop() |