| 
									
										
										
										
											1995-02-13 14:23:38 +00:00
										 |  |  | from Tkinter import * | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  | #       The way to think about this is that each radio button menu | 
					
						
							|  |  |  | #       controls a different variable -- clicking on one of the | 
					
						
							|  |  |  | #       mutually exclusive choices in a radiobutton assigns some value | 
					
						
							|  |  |  | #       to an application variable you provide. When you define a | 
					
						
							|  |  |  | #       radiobutton menu choice, you have the option of specifying the | 
					
						
							|  |  |  | #       name of a varaible and value to assign to that variable when | 
					
						
							|  |  |  | #       that choice is selected. This clever mechanism relieves you, | 
					
						
							|  |  |  | #       the programmer, from having to write a dumb callback that | 
					
						
							|  |  |  | #       probably wouldn't have done anything more than an assignment | 
					
						
							|  |  |  | #       anyway. The Tkinter options for this follow their Tk | 
					
						
							|  |  |  | #       counterparts: | 
					
						
							|  |  |  | #       {"variable" : my_flavor_variable, "value" : "strawberry"} | 
					
						
							| 
									
										
										
										
											1995-02-13 14:23:38 +00:00
										 |  |  | #       where my_flavor_variable is an instance of one of the | 
					
						
							|  |  |  | #       subclasses of Variable, provided in Tkinter.py (there is | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  | #       StringVar(), IntVar(), DoubleVar() and BooleanVar() to choose | 
					
						
							|  |  |  | #       from) | 
					
						
							| 
									
										
										
										
											1995-02-13 14:23:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-07-30 18:57:18 +00:00
										 |  |  | def makePoliticalParties(var): | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  |     # make menu button | 
					
						
							|  |  |  |     Radiobutton_button = Menubutton(mBar, text='Political Party', | 
					
						
							|  |  |  |                                     underline=0) | 
					
						
							| 
									
										
										
										
											1996-07-30 18:57:18 +00:00
										 |  |  |     Radiobutton_button.pack(side=LEFT, padx='2m') | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-02-13 14:23:38 +00:00
										 |  |  |     # the primary pulldown | 
					
						
							|  |  |  |     Radiobutton_button.menu = Menu(Radiobutton_button) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  |     Radiobutton_button.menu.add_radiobutton(label='Republican', | 
					
						
							|  |  |  |                                             variable=var, value=1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Radiobutton_button.menu.add('radiobutton', {'label': 'Democrat', | 
					
						
							|  |  |  |                                                 'variable' : var, | 
					
						
							|  |  |  |                                                 'value' : 2}) | 
					
						
							| 
									
										
										
										
											1995-02-13 14:23:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  |     Radiobutton_button.menu.add('radiobutton', {'label': 'Libertarian', | 
					
						
							|  |  |  |                                                 'variable' : var, | 
					
						
							|  |  |  |                                                 'value' : 3}) | 
					
						
							| 
									
										
										
										
											1995-02-13 14:23:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-07-30 18:57:18 +00:00
										 |  |  |     var.set(2) | 
					
						
							| 
									
										
										
										
											1995-02-13 14:23:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # set up a pointer from the file menubutton back to the file menu | 
					
						
							|  |  |  |     Radiobutton_button['menu'] = Radiobutton_button.menu | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return Radiobutton_button | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-07-30 18:57:18 +00:00
										 |  |  | def makeFlavors(var): | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  |     # make menu button | 
					
						
							|  |  |  |     Radiobutton_button = Menubutton(mBar, text='Flavors', | 
					
						
							|  |  |  |                                     underline=0) | 
					
						
							| 
									
										
										
										
											1996-07-30 18:57:18 +00:00
										 |  |  |     Radiobutton_button.pack(side=LEFT, padx='2m') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-02-13 14:23:38 +00:00
										 |  |  |     # the primary pulldown | 
					
						
							|  |  |  |     Radiobutton_button.menu = Menu(Radiobutton_button) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-07-30 18:57:18 +00:00
										 |  |  |     Radiobutton_button.menu.add_radiobutton(label='Strawberry', | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  |                                             variable=var, value='Strawberry') | 
					
						
							| 
									
										
										
										
											1995-02-13 14:23:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-07-30 18:57:18 +00:00
										 |  |  |     Radiobutton_button.menu.add_radiobutton(label='Chocolate', | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  |                                             variable=var, value='Chocolate') | 
					
						
							| 
									
										
										
										
											1995-02-13 14:23:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-07-30 18:57:18 +00:00
										 |  |  |     Radiobutton_button.menu.add_radiobutton(label='Rocky Road', | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  |                                             variable=var, value='Rocky Road') | 
					
						
							| 
									
										
										
										
											1995-02-13 14:23:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # choose a default | 
					
						
							| 
									
										
										
										
											1996-07-30 18:57:18 +00:00
										 |  |  |     var.set("Chocolate") | 
					
						
							| 
									
										
										
										
											1995-02-13 14:23:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # set up a pointer from the file menubutton back to the file menu | 
					
						
							|  |  |  |     Radiobutton_button['menu'] = Radiobutton_button.menu | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return Radiobutton_button | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def printStuff(): | 
					
						
							| 
									
										
										
										
											2007-07-17 20:59:35 +00:00
										 |  |  |     print("party is", party.get()) | 
					
						
							|  |  |  |     print("flavor is", flavor.get()) | 
					
						
							|  |  |  |     print() | 
					
						
							| 
									
										
										
										
											1995-02-13 14:23:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ################################################# | 
					
						
							|  |  |  | #### Main starts here ... | 
					
						
							|  |  |  | root = Tk() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # make a menu bar | 
					
						
							| 
									
										
										
										
											1996-07-30 18:57:18 +00:00
										 |  |  | mBar = Frame(root, relief=RAISED, borderwidth=2) | 
					
						
							|  |  |  | mBar.pack(fill=X) | 
					
						
							| 
									
										
										
										
											1995-02-13 14:23:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  | # make two application variables, | 
					
						
							| 
									
										
										
										
											1995-02-13 14:23:38 +00:00
										 |  |  | # one to control each radio button set | 
					
						
							|  |  |  | party = IntVar() | 
					
						
							|  |  |  | flavor = StringVar() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-07-30 18:57:18 +00:00
										 |  |  | Radiobutton_button = makePoliticalParties(party) | 
					
						
							|  |  |  | Radiobutton_button2 = makeFlavors(flavor) | 
					
						
							| 
									
										
										
										
											1995-02-13 14:23:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  | # finally, install the buttons in the menu bar. | 
					
						
							| 
									
										
										
										
											1995-02-13 14:23:38 +00:00
										 |  |  | # This allows for scanning from one menubutton to the next. | 
					
						
							|  |  |  | mBar.tk_menuBar(Radiobutton_button, Radiobutton_button2) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-07-30 18:57:18 +00:00
										 |  |  | b = Button(root, text="print party and flavor", foreground="red", | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  |            command=printStuff) | 
					
						
							| 
									
										
										
										
											1996-07-30 18:57:18 +00:00
										 |  |  | b.pack(side=TOP) | 
					
						
							| 
									
										
										
										
											1995-02-13 14:23:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | root.title('menu demo') | 
					
						
							|  |  |  | root.iconname('menu demo') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | root.mainloop() |