2012-04-10 65 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