すべてのエントリウィジェットに同じ変数を割り当てています。それぞれに個別の変数を作成するか、textvariable1
オプションを使用しないでください。このオプションは不要です。ウィジェット自体のメソッドを使用してウィジェットの内容を取得したり設定したりすることはできます。 textvariable
は、主に便宜上のものです(また、変数にトレースを入れて、いつ変化があるかを知ることができます)。
import tkinter as tk
import ttk
class App(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.size=5
self.vars = {}
for i in range(self.size):
self.vars[i] = tk.StringVar()
entry = ttk.Entry(self, textvariable=self.vars[i])
entry.pack(side="top", fill="x")
self.vars[i].trace("w", self.callback)
# this entry will show the other values as a list
self.e0Var = tk.StringVar()
self.e0 = ttk.Entry(self, textvariable=self.e0Var)
self.e0.pack(side="top", fill="x", pady=(4,0))
# call the callback once to establish the initial value
self.callback()
def callback(self, *args):
values = []
for i in range(self.size):
values.append(self.vars[i].get())
# make a comma separated list and store in e0Var
self.e0Var.set(str(values))
app = App()
app.mainloop()
あなたは間違っていると言う何**彼らはすべてではありません。ここで
は5つのエントリ、リストとして他の5つの値を示して6番目のエントリを持って不自然な例です。 'cant_entry'にリンクされていれば、最後のものだけです。このリンクは、すべてのエントリが 'textvariable'オプションに同じ変数を使用しているためです。 –
Mm。私は本当にTkinterの巨大な専門家ではなく、すべて同じ変数に割り当てられていることに気づきました。 – user1122107