2012-04-10 93 views
0

我的python代码有问题。我正在使用tkinter在python中编写一个图形用户界面,其中显示了几个块,其中包含大约10行,每行4个单选按钮,一个输入域和一个比例尺。下面的代码在python中为循环声明可调用变量

for r,v,mi,ma,i in zip(self.radiobuttonShapes, self.valueShapes, self.minShapes, self.maxShapes, range(1,10)): 
     ttk.Label(self.Shape, text="Shape " + str(i)).grid(column=0, row=i) 
     ttk.Radiobutton(self.Shape, text="Off", variable=r, value=1, command=self.resetAllRadiosShape).grid(column=1, row=i) 
     ttk.Radiobutton(self.Shape, text="Max", variable=r, value=2, command=self.resetAllRadiosShape).grid(column=2, row=i) 
     ttk.Radiobutton(self.Shape, text="Min", variable=r, value=3, command=self.resetAllRadiosShape).grid(column=3, row=i) 
     ttk.Radiobutton(self.Shape, text="Approx", variable=r, value=4, command=self.resetAllRadiosShape).grid(column=4, row=i) 
     ttk.Entry(self.Shape, textvariable=v).grid(column=5, row=i) 
     ttk.Scale(self.Shape, from_=mi, to=ma, variable=v).grid(column=6, row=i) 

这大多工作正常。 当我想要添加一个标签以将其全部放入并扩展该标签时,出现了问题,包含并输入字段和一个比例尺,以与approx选项一起使用。

我的问题包括无法即时创建变量,并能够通过之后的方法访问它们。

可能不太清楚,但我认为下面的虚拟代码更容易。我希望能够使其部分处于非活动状态(大约未选择时的近场)。

for i in 1 2 3 4 5 6 7 8 9 
    self.outerLabel$(i) = ttk.Label(self.Shape).grid(row=i) 
    self.upperLabel$(i) = ttk.Label(self.outerLabel$(i)).grid(row=0) 
    ttk.Radiobutton(self.upperLabel$(i)).grid(column=0) 
    ttk.Radiobutton(self.upperLabel$(i)).grid(column=1) 
    ttk.Radiobutton(self.upperLabel$(i)).grid(column=2) 
    ttk.Radiobutton(self.upperLabel$(i)).grid(column=3) 
    ttk.Entry(self.upperLabel$(i)).grid(column=4) 
    ttk.Scale(self.upperLabel$(i)).grid(column=5) 
    self.lowerLabel$(i) = ttk.Label(self.outerLabel$(i)).grid(row=1) 
    ttk.Entry(self.lowerLabel$(i)).grid(column=0) 
    ttk.Scale(self.lowerLabel$(i)).grid(column=1) 
    self.lowerLabel$(i).configure(state=DISABLED) 

回答

0

您应该使用这个dictionary,而不是动态的变量名,设置代码会是这个样子:

def __init__(self): 
    self.outerLabels = {} 
    self.upperLabels = {} 
    # whatever else is currently in __init__() 

而且无论代码是从你的问题:

for i in range(1, 10): 
    self.outerLabels[i] = ttk.Label(self.Shape).grid(row=i) 
    self.upperLabels[i] = ttk.Label(self.outerLabels[i]).grid(row=0) 
    ttk.Radiobutton(self.upperLabels[i]).grid(column=0) 
    ttk.Radiobutton(self.upperLabels[i]).grid(column=1) 
    ttk.Radiobutton(self.upperLabels[i]).grid(column=2) 
    ttk.Radiobutton(self.upperLabels[i]).grid(column=3) 
    ttk.Entry(self.upperLabels[i]).grid(column=4) 
    ttk.Scale(self.upperLabels[i]).grid(column=5) 
    self.lowerLabels[i] = ttk.Label(self.outerLabels[i]).grid(row=1) 
    ttk.Entry(self.lowerLabels[i]).grid(column=0) 
    ttk.Scale(self.lowerLabels[i]).grid(column=1) 
    self.lowerLabels[i].configure(state=DISABLED) 
+0

我试图使用一个字典,但python告诉我,我不能在dict中存储可调用变量。 – wadum 2012-04-10 20:14:44

+1

@wadum - 您可以将您看到的错误添加到您的问题中吗?您应该能够将函数和可调用类作为字典值,尽管可能不是字典键。 – 2012-04-10 20:17:16

+0

@ F.J我很抱歉,一定写了别的错误,现在作品美化:)谢谢! – wadum 2012-04-10 20:31:18