我能让原始代码正常工作。我不得不在错误的地点进行全球申报。。。我还必须首先在主循环中定义变量。我知道有一种更优雅的方式来做这件事,但它很管用。在for i in xrange(1,100):
exec('var1_' + str(i) + ' = Tkinter.IntVar()')
exec('var2_' + str(i) + ' = Tkinter.IntVar()')
exec('var3_' + str(i) + ' = Tkinter.IntVar()')
exec('var4_' + str(i) + ' = Tkinter.IntVar()')
exec('var5_' + str(i) + ' = Tkinter.IntVar()')
exec('var6_' + str(i) + ' = Tkinter.IntVar()')
def NewWindow():
IPoints=int(Entry1.get())
NumPoints=IPoints+1
MaxComp=IPoints*6
master = Tkinter.Toplevel()
master.title("Select Unit Load Components")
Label(master, text="Interface Points ").grid(row=0,column=0, sticky=W)
Label(master, text="FX").grid(row=0,column=1, sticky=W)
Label(master, text="FY").grid(row=0,column=2, sticky=W)
Label(master, text="FZ").grid(row=0,column=3, sticky=W)
Label(master, text="MX").grid(row=0,column=4, sticky=W)
Label(master, text="MY").grid(row=0,column=5, sticky=W)
Label(master, text="MZ").grid(row=0,column=6, sticky=W)
def var_states():
exec('global var1_' + str(i)) in globals(), locals()
exec('global var2_' + str(i)) in globals(), locals()
exec('global var3_' + str(i)) in globals(), locals()
exec('global var4_' + str(i)) in globals(), locals()
exec('global var5_' + str(i)) in globals(), locals()
exec('global var6_' + str(i)) in globals(), locals()
print("FX: %d, FY: %d, FZ: %d, MX: %d, MY: %d, MZ: %d" % (var1_15.get(), var2_15.get(), var3_15.get(),var4_15.get(), var5_15.get(), var6_15.get()))
for i in xrange(1,NumPoints):
Label(master, text="PT_%d: " % i).grid(row=i,column=0, sticky=W)
exec('Checkbutton(master, text=" ", variable=var1_' + str(i) + ').grid(row=i,column=1, sticky=W)') in globals(), locals()
exec('Checkbutton(master, text=" ", variable=var2_' + str(i) + ').grid(row=i,column=2, sticky=W)') in globals(), locals()
exec('Checkbutton(master, text=" ", variable=var3_' + str(i) + ').grid(row=i,column=3, sticky=W)') in globals(), locals()
exec('Checkbutton(master, text=" ", variable=var4_' + str(i) + ').grid(row=i,column=4, sticky=W)') in globals(), locals()
exec('Checkbutton(master, text=" ", variable=var5_' + str(i) + ').grid(row=i,column=5, sticky=W)') in globals(), locals()
exec('Checkbutton(master, text=" ", variable=var6_' + str(i) + ').grid(row=i,column=6, sticky=W)') in globals(), locals()
Button(master, text='Show', command=var_states).grid(row=100, sticky=W, pady=4)