def fresh():
t = Toplevel()
t.geometry("%dx%d%+d%+d" % (600, 400, 0, 0))
rad1 = StringVar(t)
opt1 = StringVar(t)
opt1.set("School Board")
opt2 = StringVar(t)
opt2.set("Department")
form = Frame(t)
form.pack()
for (ix, label) in enumerate(fieldnames):
lab = Label(form, text=label)
ent = Entry(form)
lab.grid(row=ix, column=0)
ent.grid(row=ix, column=1)
entries[label] = ent
r1=Radiobutton(form, text="M", variable=rad1, value="M")
r1.grid(row=5,column=0)
r2 = Radiobutton(form, text="F", variable=rad1, value="F")
r2.grid(row=5, column=1)
student.gender = rad1.get()
l = OptionMenu(form, opt1, "CBSE", "State Board","SB-TN","SB-KA","SB-KL","SB-AP","SB-RJ","SB-MH" )
l.grid(row=6, column=1)
student.SB = opt1.get()
l2 = OptionMenu(form, opt2,"AE","CH","CI","CSE","ECE","EEE","EIE","ME" )
l2.grid(row=7, column=1)
student.dept = opt2.get()
单选按钮的值仍为NULL值。
除了默认值之外,opt1和opt2值也没有改变。
请帮助。
答案 0 :(得分:0)
他们正在改变,你只是没有追踪变化。当您使用以下行设置它们时:
student.gender = rad1.get()
只有在控制流经过它们时才会设置它。因此,这些值将成为启动代码时的值。
您可以使用trace
方法跟踪变量类实例。这是一个小例子:
root = Tk()
def callback(*args): # function called when var changes
print var.get() # this is where you'd set another variable to var.get()
var = StringVar()
Radiobutton(root, text='M', variable=var, value='M').pack()
Radiobutton(root, text='F', variable=var, value='F').pack()
var.trace('w', callback) # this will call a function when var changes
mainloop()
或者,您可以在Radiobutton选项中将command
设置为回调。或者,如果您不需要实时更新的值,您可以创建一个按钮来同时处理字段的所有处理。