import sys
from Tkinter import *

def runGUI(title):

    root = Tk()
    var = {}
    numPrint = [1]
    numDisplay = [1]
    dv = StringVar()


    def displayVar(title):
        dv.set("%s \"%s\" %f (%s %s %s) %1d" % (title, 
	                                    var["Entry Text"].get(),
	                                    var["Scale"].get(),
	                                    str(var["Check Button"][0].get()),
	                                    str(var["Check Button"][1].get()),
	                                    str(var["Check Button"][2].get()),
	                                    var["Radio Button"].get()))
	numDisplay[0] += 1

    def printVar(title):
        print "%s \"%s\" %f (%s %s %s) %1d" % (title, 
	                                    var["Entry Text"].get(),
	                                    var["Scale"].get(),
	                                    str(var["Check Button"][0].get()),
	                                    str(var["Check Button"][1].get()),
	                                    str(var["Check Button"][2].get()),
	                                    var["Radio Button"].get())
	numPrint[0] += 1

    def makeGUI(title):
        root.title(title)

        etf = Frame(root)
	etv = StringVar()
	etv.set("Initial Text String")
	Label(etf, text="Text Variable").pack(expand=YES, fill=BOTH, side=LEFT)
	Entry(etf, textvariable=etv).pack(expand=YES, fill=X, side=RIGHT)
	etf.pack(expand=YES, fill=BOTH, side=TOP)
	var["Entry Text"] = etv

	sf = Frame(root)
	sv = DoubleVar()
	Scale(label="Scale Demo", variable=sv, from_=0.0, to=4.0, 
	      tickinterval=1.0, resolution=0.5, showvalue=YES, 
	      orient='horizontal').pack(expand=YES, fill=BOTH, side=TOP)
	var["Scale"] = sv

        contf = Frame(root)
        Button(contf, text="Print\nVariables", command=(lambda : printVar("Print # %1d:" % (numPrint[0],)))).pack(expand=YES, fill=BOTH, side=LEFT)
        Button(contf, text="Display\nVariables", command=(lambda : displayVar("Display # %1d:" % (numDisplay[0],)))).pack(expand=YES, fill=BOTH, side=LEFT)
        Button(contf, text="Exit", command=root.quit).pack(expand=YES, fill=BOTH, side=RIGHT)
	contf.pack(expand=YES, fill=BOTH, side=BOTTOM)

        df = Frame(root)
        Label(df, text="Variable Value Display Area").pack(expand=YES, fill=X, side=TOP)
        dv.set("No Display Activated")
        Label(df, textvariable=dv).pack(expand=YES, fill=X, side=TOP)
        df.pack(expand=YES, fill=BOTH, side=BOTTOM)

        cbf = Frame(root)
	cbv = []
	for i in range(3):
	    rbv = BooleanVar()
	    rbv.set(False)
            Checkbutton(cbf, variable=rbv, text="CB%1d" % (i + 1,)).pack(expand=YES, fill=BOTH, side=BOTTOM)
	    cbv.append(rbv)
	cbf.pack(expand=YES, fill=BOTH, side=LEFT)
	var["Check Button"] = cbv

        rbf = Frame(root)
        rbv = IntVar()
        rbv.set(1)
        Radiobutton(rbf, variable=rbv, value=1, text="RB1").grid(row=1, column=1)
        Radiobutton(rbf, variable=rbv, value=2, text="RB2").grid(row=1, column=2)
        Radiobutton(rbf, variable=rbv, value=3, text="RB3").grid(row=2, column=1)
        Radiobutton(rbf, variable=rbv, value=4, text="RB4").grid(row=2, column=2)
        rbf.pack(expand=YES, fill=BOTH, side=RIGHT)
	var["Radio Button"] = rbv

    makeGUI(title)
    root.mainloop()
    return [var["Entry Text"].get(), 
            var["Scale"].get(), 
            [var["Check Button"][0].get(), 
	     var["Check Button"][1].get(), 
	     var["Check Button"][2].get()],
	    var["Radio Button"].get()]

var = runGUI(sys.argv[0])
print "Final Values: ", var

