| 
									
										
										
										
											1994-10-07 09:55:26 +00:00
										 |  |  | 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          | | 
					
						
							| 
									
										
										
										
											1995-01-10 17:07:40 +00:00
										 |  |  | # |                |  <------ This is a MENU. The lines of text in the menu are | 
					
						
							|  |  |  | # |                |                          MENU ENTRIES | 
					
						
							| 
									
										
										
										
											1994-10-07 09:55:26 +00:00
										 |  |  | # |                +---------------+ | 
					
						
							|  |  |  | # | 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() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 |