Home | History | Annotate | Download | only in matt
      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