/gui/tour/buttonbars.py

https://bitbucket.org/haploc/pythonscripts
Python | 53 lines | 40 code | 8 blank | 5 comment | 4 complexity | 52e89229aefc1e99356c5dbe0a2464c0 MD5 | raw file
  1. # Example 8-36
  2. """
  3. check and radio button bar classes for apps that fetch state later;
  4. pass a list of options, call state(), variable details automated
  5. """
  6. from tkinter import *
  7. class Checkbar(Frame):
  8. def __init__(self, parent=None, picks=[], side=LEFT, anchor=W):
  9. Frame.__init__(self, parent)
  10. self.vars = []
  11. for pick in picks:
  12. var = IntVar()
  13. chk = Checkbutton(self, text=pick, variable=var)
  14. chk.pack(side=side, anchor=anchor, expand=YES)
  15. self.vars.append(var)
  16. def state(self):
  17. return [var.get() for var in self.vars]
  18. class Radiobar(Frame):
  19. def __init__(self, parent=None, picks=[], side=LEFT, anchor=W):
  20. Frame.__init__(self, parent)
  21. self.var = StringVar()
  22. self.var.set(picks[0])
  23. for pick in picks:
  24. rad = Radiobutton(self, text=pick, value=pick, variable=self.var)
  25. rad.pack(side=side, anchor=anchor, expand=YES)
  26. def state(self):
  27. return self.var.get()
  28. def main():
  29. root = Tk()
  30. lng = Checkbar(root, ['Python', 'C#', 'Java', 'C++'])
  31. gui = Radiobar(root, ['win', 'x11', 'mac'], side=TOP, anchor=NW)
  32. tgl = Checkbar(root, ['All'])
  33. gui.pack(side=LEFT, fill=Y)
  34. lng.pack(side=TOP, fill=X)
  35. tgl.pack(side=LEFT)
  36. lng.config(relief=GROOVE, bd=2)
  37. gui.config(relief=RIDGE, bd=2)
  38. def allstates():
  39. print(gui.state(), lng.state(), tgl.state())
  40. from quitter import Quitter
  41. Quitter(root).pack(side=RIGHT)
  42. Button(root, text='Peek', command=allstates).pack(side=RIGHT)
  43. root.mainloop()
  44. if __name__ == '__main__':
  45. main()