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