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", "separator" 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() 113