我的python代码有问题。我正在使用tkinter在python中编写一个GUI,它显示了几个带有大约10行的块,每行有4个radiobuttons,一个输入字段和一个刻度。代码
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)
这大部分工作正常。 当我想添加一个标签以将其全部放入并使用另一行(包括输入字段和比例)扩展该标签时,我的问题出现了,以便与约选项一起使用。
我的问题在于无法动态创建变量,并且之后可以通过他们的方法访问变量。
可能不太清楚,但我认为下面的虚拟代码使它更容易。我希望能够使它的一部分处于非活动状态(未选择近似时的近场)。
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 :(得分: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)