diff options
-rw-r--r-- | Demo/tkinter/matt/two-radio-groups.py | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/Demo/tkinter/matt/two-radio-groups.py b/Demo/tkinter/matt/two-radio-groups.py new file mode 100644 index 0000000..f65c8a9 --- /dev/null +++ b/Demo/tkinter/matt/two-radio-groups.py @@ -0,0 +1,118 @@ +from Tkinter import * + +# 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"} +# where my_flavor_variable is an instance of one of the +# subclasses of Variable, provided in Tkinter.py (there is +# StringVar(), IntVar(), DoubleVar() and BooleanVar() to choose +# from) + + + +def makePoliticalParties(): + # make menu button + Radiobutton_button = Menubutton(mBar, {'text': 'Political Party', + 'underline': 0, + Pack: {'side': 'left', + 'padx': '2m'}}) + + # the primary pulldown + Radiobutton_button.menu = Menu(Radiobutton_button) + + Radiobutton_button.menu.add('radiobutton', {'label': 'Republican', + 'variable' : party, + 'value' : 1}) + + Radiobutton_button.menu.add('radiobutton', {'label': 'Democrat', + 'variable' : party, + 'value' : 2}) + + Radiobutton_button.menu.add('radiobutton', {'label': 'Libertarian', + 'variable' : party, + 'value' : 3}) + + party.set(2) + + # set up a pointer from the file menubutton back to the file menu + Radiobutton_button['menu'] = Radiobutton_button.menu + + return Radiobutton_button + + +def makeFlavors(): + # make menu button + Radiobutton_button = Menubutton(mBar, {'text': 'Flavors', + 'underline': 0, + Pack: {'side': 'left', + 'padx': '2m'}}) + # the primary pulldown + Radiobutton_button.menu = Menu(Radiobutton_button) + + Radiobutton_button.menu.add('radiobutton', {'label': 'Strawberry', + 'variable' : flavor, + 'value' : 'Strawberry'}) + + Radiobutton_button.menu.add('radiobutton', {'label': 'Chocolate', + 'variable' : flavor, + 'value' : 'Chocolate'}) + + Radiobutton_button.menu.add('radiobutton', {'label': 'Rocky Road', + 'variable' : flavor, + 'value' : 'Rocky Road'}) + + # choose a default + flavor.set("Chocolate") + + # set up a pointer from the file menubutton back to the file menu + Radiobutton_button['menu'] = Radiobutton_button.menu + + return Radiobutton_button + + +def printStuff(): + print "party is", party.get() + print "flavor is", flavor.get() + print "" + +################################################# +#### Main starts here ... +root = Tk() + + +# make a menu bar +mBar = Frame(root, {'relief': 'raised', + 'bd': 2, + Pack: {'side': 'top', + 'fill': 'x'}}) + +# make two application variables, +# one to control each radio button set +party = IntVar() +flavor = StringVar() + +Radiobutton_button = makePoliticalParties() +Radiobutton_button2 = makeFlavors() + +# finally, install the buttons in the menu bar. +# This allows for scanning from one menubutton to the next. +mBar.tk_menuBar(Radiobutton_button, Radiobutton_button2) + +b = Button(root, {"text": "print party and flavor", + "command" : printStuff, + "fg": "red"}) +b.pack({"side" : "top"}) + +root.title('menu demo') +root.iconname('menu demo') + +root.mainloop() |