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