/Demo/tkinter/matt/two-radio-groups.py

http://unladen-swallow.googlecode.com/ · Python · 110 lines · 49 code · 31 blank · 30 comment · 0 complexity · 46730b400c7764804fb16d1b5585837c MD5 · raw file

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