Home | History | Annotate | Download | only in matt
      1 from Tkinter import *
      2 
      3 #       The way to think about this is that each radio button menu
      4 #       controls a different variable -- clicking on one of the
      5 #       mutually exclusive choices in a radiobutton assigns some value
      6 #       to an application variable you provide. When you define a
      7 #       radiobutton menu choice, you have the option of specifying the
      8 #       name of a varaible and value to assign to that variable when
      9 #       that choice is selected. This clever mechanism relieves you,
     10 #       the programmer, from having to write a dumb callback that
     11 #       probably wouldn't have done anything more than an assignment
     12 #       anyway. The Tkinter options for this follow their Tk
     13 #       counterparts:
     14 #       {"variable" : my_flavor_variable, "value" : "strawberry"}
     15 #       where my_flavor_variable is an instance of one of the
     16 #       subclasses of Variable, provided in Tkinter.py (there is
     17 #       StringVar(), IntVar(), DoubleVar() and BooleanVar() to choose
     18 #       from)
     19 
     20 
     21 
     22 def makePoliticalParties(var):
     23     # make menu button
     24     Radiobutton_button = Menubutton(mBar, text='Political Party',
     25                                     underline=0)
     26     Radiobutton_button.pack(side=LEFT, padx='2m')
     27 
     28     # the primary pulldown
     29     Radiobutton_button.menu = Menu(Radiobutton_button)
     30 
     31     Radiobutton_button.menu.add_radiobutton(label='Republican',
     32                                             variable=var, value=1)
     33 
     34     Radiobutton_button.menu.add('radiobutton', {'label': 'Democrat',
     35                                                 'variable' : var,
     36                                                 'value' : 2})
     37 
     38     Radiobutton_button.menu.add('radiobutton', {'label': 'Libertarian',
     39                                                 'variable' : var,
     40                                                 'value' : 3})
     41 
     42     var.set(2)
     43 
     44     # set up a pointer from the file menubutton back to the file menu
     45     Radiobutton_button['menu'] = Radiobutton_button.menu
     46 
     47     return Radiobutton_button
     48 
     49 
     50 def makeFlavors(var):
     51     # make menu button
     52     Radiobutton_button = Menubutton(mBar, text='Flavors',
     53                                     underline=0)
     54     Radiobutton_button.pack(side=LEFT, padx='2m')
     55 
     56     # the primary pulldown
     57     Radiobutton_button.menu = Menu(Radiobutton_button)
     58 
     59     Radiobutton_button.menu.add_radiobutton(label='Strawberry',
     60                                             variable=var, value='Strawberry')
     61 
     62     Radiobutton_button.menu.add_radiobutton(label='Chocolate',
     63                                             variable=var, value='Chocolate')
     64 
     65     Radiobutton_button.menu.add_radiobutton(label='Rocky Road',
     66                                             variable=var, value='Rocky Road')
     67 
     68     # choose a default
     69     var.set("Chocolate")
     70 
     71     # set up a pointer from the file menubutton back to the file menu
     72     Radiobutton_button['menu'] = Radiobutton_button.menu
     73 
     74     return Radiobutton_button
     75 
     76 
     77 def printStuff():
     78     print "party is", party.get()
     79     print "flavor is", flavor.get()
     80     print
     81 
     82 #################################################
     83 #### Main starts here ...
     84 root = Tk()
     85 
     86 
     87 # make a menu bar
     88 mBar = Frame(root, relief=RAISED, borderwidth=2)
     89 mBar.pack(fill=X)
     90 
     91 # make two application variables,
     92 # one to control each radio button set
     93 party = IntVar()
     94 flavor = StringVar()
     95 
     96 Radiobutton_button = makePoliticalParties(party)
     97 Radiobutton_button2 = makeFlavors(flavor)
     98 
     99 # finally, install the buttons in the menu bar.
    100 # This allows for scanning from one menubutton to the next.
    101 mBar.tk_menuBar(Radiobutton_button, Radiobutton_button2)
    102 
    103 b = Button(root, text="print party and flavor", foreground="red",
    104            command=printStuff)
    105 b.pack(side=TOP)
    106 
    107 root.title('menu demo')
    108 root.iconname('menu demo')
    109 
    110 root.mainloop()
    111