我正在用python 2,7中的Tkinter写一个小gui。在某些时候,我调用一个函数来创建一个弹出窗口,该窗口由许多复选框填充,复选框的数量由属性变量定义。
def attribute_select(attributes):
popup = tk.Tk()
popup.wm_title("Attribute selection")
label = ttk.Label(popup, text="Please select which of the following \n attributes will undergo k-anonymity.",
font=NORMAL_FONT)
label.pack(side="top", fill="x", pady=10)
def read_status(key):
var_obj = var.get(key)
print "key is:", key
print "var_obj.get() is:", var_obj.get()
def leave_mini():
popup.destroy()
var = dict()
count = 1
for child in range(attributes):
var[child] = tk.IntVar()
chk = tk.Checkbutton(popup, text='Attribute: '+str(count), variable=var[child], justify="left", onvalue=1,
offvalue=0, command=lambda key=child: read_status(key))
count += 1
chk.pack()
print var
exit_button = ttk.Button(popup, text="OK", command=leave_mini)
exit_button.pack()
popup.mainloop()
一切运行得很好但是当我尝试检查其中一个框时,变量值不会每次更改打印输出:[key is:0 var_obj.get()is:0]或[key is :5 var_obj.get()是:0]。所以关键是适合每个盒子,但变量不会改变。我确定这是一个简单的解决方案我无法看到它...任何想法?
答案 0 :(得分:0)
您不得创建多个Tk
的实例。通过在attribute_select
中创建实例,我必须假设您在其他地方创建了“真正的”根窗口。创建多个Tk
实例的副作用之一是您的tkinter变量(IntVar
等)的行为与您期望的不同。
如果您需要弹出窗口,请创建Toplevel
的实例。