blob: 2487561ccfcd1b4c4e72b159f13bfb562a9a4dca [file] [log] [blame]
Guido van Rossum35820f71994-10-07 09:55:26 +00001from Tkinter import *
2
Tim Peters182b5ac2004-07-18 06:16:08 +00003# some vocabulary to keep from getting confused. This terminology
4# is something I cooked up for this file, but follows the man pages
Guido van Rossum35820f71994-10-07 09:55:26 +00005# pretty closely
Tim Peters182b5ac2004-07-18 06:16:08 +00006#
7#
8#
Guido van Rossum35820f71994-10-07 09:55:26 +00009# This is a MENUBUTTON
10# V
11# +-------------+
12# | |
Tim Peters182b5ac2004-07-18 06:16:08 +000013#
Guido van Rossum35820f71994-10-07 09:55:26 +000014# +------------++------------++------------+
15# | || || |
16# | File || Edit || Options | <-------- the MENUBAR
17# | || || |
18# +------------++------------++------------+
19# | New... |
20# | Open... |
21# | Print |
Guido van Rossumb8fe9b31995-01-10 17:07:40 +000022# | | <------ This is a MENU. The lines of text in the menu are
23# | | MENU ENTRIES
Guido van Rossum35820f71994-10-07 09:55:26 +000024# | +---------------+
Tim Peters182b5ac2004-07-18 06:16:08 +000025# | Open Files > | file1 |
Guido van Rossum35820f71994-10-07 09:55:26 +000026# | | file2 |
27# | | another file | <------ this cascading part is also a MENU
28# +----------------| |
29# | |
30# | |
31# | |
32# +---------------+
33
34
35
36def new_file():
Collin Winter6f2df4d2007-07-17 20:59:35 +000037 print("opening new file")
Guido van Rossum35820f71994-10-07 09:55:26 +000038
39
40def open_file():
Collin Winter6f2df4d2007-07-17 20:59:35 +000041 print("opening OLD file")
Guido van Rossum35820f71994-10-07 09:55:26 +000042
43
44def makeFileMenu():
45 # make menu button : "File"
Guido van Rossum89cb67b1996-07-30 18:57:18 +000046 File_button = Menubutton(mBar, text='File', underline=0)
47 File_button.pack(side=LEFT, padx="1m")
Guido van Rossum35820f71994-10-07 09:55:26 +000048 File_button.menu = Menu(File_button)
Tim Peters182b5ac2004-07-18 06:16:08 +000049
50 # add an item. The first param is a menu entry type,
Guido van Rossum35820f71994-10-07 09:55:26 +000051 # must be one of: "cascade", "checkbutton", "command", "radiobutton", "seperator"
52 # see menu-demo-2.py for examples of use
Tim Peters182b5ac2004-07-18 06:16:08 +000053 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')
Guido van Rossum89cb67b1996-07-30 18:57:18 +000062
Guido van Rossum35820f71994-10-07 09:55:26 +000063 # 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():
Guido van Rossum89cb67b1996-07-30 18:57:18 +000071 Edit_button = Menubutton(mBar, text='Edit', underline=0)
72 Edit_button.pack(side=LEFT, padx="1m")
Guido van Rossum35820f71994-10-07 09:55:26 +000073 Edit_button.menu = Menu(Edit_button)
74
75 # just to be cute, let's disable the undo option:
Guido van Rossum89cb67b1996-07-30 18:57:18 +000076 Edit_button.menu.add('command', label="Undo")
Guido van Rossuma4ddb231996-08-21 20:13:08 +000077 # Since the tear-off bar is the 0th entry,
78 # undo is the 1st entry...
79 Edit_button.menu.entryconfig(1, state=DISABLED)
Guido van Rossum35820f71994-10-07 09:55:26 +000080
81 # and these are just for show. No "command" callbacks attached.
Guido van Rossum89cb67b1996-07-30 18:57:18 +000082 Edit_button.menu.add_command(label="Cut")
83 Edit_button.menu.add_command(label="Copy")
84 Edit_button.menu.add_command(label="Paste")
85
Guido van Rossum35820f71994-10-07 09:55:26 +000086 # 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
Guido van Rossum89cb67b1996-07-30 18:57:18 +000099mBar = Frame(root, relief=RAISED, borderwidth=2)
100mBar.pack(fill=X)
Guido van Rossum35820f71994-10-07 09:55:26 +0000101
102File_button = makeFileMenu()
103Edit_button = makeEditMenu()
104
Tim Peters182b5ac2004-07-18 06:16:08 +0000105# finally, install the buttons in the menu bar.
Guido van Rossum35820f71994-10-07 09:55:26 +0000106# This allows for scanning from one menubutton to the next.
107mBar.tk_menuBar(File_button, Edit_button)
108
Guido van Rossum35820f71994-10-07 09:55:26 +0000109root.title('menu demo')
110root.iconname('packer')
111
112root.mainloop()