0

Python コードに問題があります。私は tkinter を使用して Python で GUI を作成しています。これは、4 つのラジオボタン、入力フィールド、および各行のスケールを含む約 10 行の複数のブロックを表示します。以下のコード

    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 オプションで使用するときに発生します。

私の問題は、その場で変数を作成できず、後でそれらのメソッドでそれらにアクセスできないことです。

わかりにくいかもしれませんが、以下のダミーコードがわかりやすいと思います。その一部を非アクティブにできるようにしたい (approx が選択されていない場合の 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)
4

1 に答える 1

0

これには、動的変数名の代わりに辞書を使用する必要があります。セットアップ コードは次のようになります。

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)
于 2012-04-10T20:13:08.253 に答える