/gui/tour/buttonbars.py
Python | 53 lines | 40 code | 8 blank | 5 comment | 4 complexity | 52e89229aefc1e99356c5dbe0a2464c0 MD5 | raw file
- # Example 8-36
- """
- check and radio button bar classes for apps that fetch state later;
- pass a list of options, call state(), variable details automated
- """
- from tkinter import *
- class Checkbar(Frame):
- def __init__(self, parent=None, picks=[], side=LEFT, anchor=W):
- Frame.__init__(self, parent)
- self.vars = []
- for pick in picks:
- var = IntVar()
- chk = Checkbutton(self, text=pick, variable=var)
- chk.pack(side=side, anchor=anchor, expand=YES)
- self.vars.append(var)
- def state(self):
- return [var.get() for var in self.vars]
- class Radiobar(Frame):
- def __init__(self, parent=None, picks=[], side=LEFT, anchor=W):
- Frame.__init__(self, parent)
- self.var = StringVar()
- self.var.set(picks[0])
- for pick in picks:
- rad = Radiobutton(self, text=pick, value=pick, variable=self.var)
- rad.pack(side=side, anchor=anchor, expand=YES)
- def state(self):
- return self.var.get()
- def main():
- root = Tk()
- lng = Checkbar(root, ['Python', 'C#', 'Java', 'C++'])
- gui = Radiobar(root, ['win', 'x11', 'mac'], side=TOP, anchor=NW)
- tgl = Checkbar(root, ['All'])
- gui.pack(side=LEFT, fill=Y)
- lng.pack(side=TOP, fill=X)
- tgl.pack(side=LEFT)
- lng.config(relief=GROOVE, bd=2)
- gui.config(relief=RIDGE, bd=2)
- def allstates():
- print(gui.state(), lng.state(), tgl.state())
- from quitter import Quitter
- Quitter(root).pack(side=RIGHT)
- Button(root, text='Peek', command=allstates).pack(side=RIGHT)
- root.mainloop()
- if __name__ == '__main__':
- main()