Tkinter中单选按钮和选项菜单值的值

时间:2014-04-29 12:10:25

标签: python-2.7 user-interface tkinter

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值也没有改变。

请帮助。

1 个答案:

答案 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设置为回调。或者,如果您不需要实时更新的值,您可以创建一个按钮来同时处理字段的所有处理。