显示在中为(tkinter-python)创建的StringVar的多个组合框的默认值



我想从对象列表(info(中创建ComboBox。我创建了下面的程序。我的问题是显示组合框的默认值。为此,我使用了Stringvar。但默认值仅显示在上次创建的组合框中。我认为这是因为我的StringVar对于所有ComboBox都是唯一的,但我不知道如何解决这个问题。我该怎么做?

计数器=0

for i in infos:
frame = Frame(principalFrame, bd=1)
frame.grid(row=counter, column=0, pady=20)
frame.columnconfigure(0,weight=1)
label = Label(frame, text=i.name)
label.grid(row=0, column=0, sticky="news")
label.columnconfigure(0,weight=1)
varCombo = StringVar(window)
varCombo.set(i.default)
combo = ttk.Combobox(frame, state="readonly", textvariable=varCombo, values=i.values)
combo.grid(row=1, column=0, sticky="news")
combo.columnconfigure(0, weight=1)
combo.rowconfigure(0, weight=1)
counter = counter + 1

由于StringVar使用相同的变量varCombo,因此只有StringVar的最后一个实例引用了它,其他实例将被垃圾收集。

如果你想稍后访问这些StringVar,最好使用字典来存储它们:

varCombo = {}
counter = 0
for i in infos:
frame = Frame(principalFrame, bd=1)
frame.grid(row=counter, column=0, pady=20)
frame.columnconfigure(0,weight=1)
label = Label(frame, text=i.name)
label.grid(row=0, column=0, sticky="news")
label.columnconfigure(0,weight=1)
var1 = StringVar(window)
var1.set(i.default)
combo = ttk.Combobox(frame, state="readonly", textvariable=var1, values=i.values)
combo.grid(row=1, column=0, sticky="news")
combo.columnconfigure(0, weight=1)
combo.rowconfigure(0, weight=1)
varCombo[i.name] = var1
counter = counter + 1

combo=ttk。组合框(框,状态="只读",文本变量=varCombo,值=i.values(

每次循环运行时,都会将一个新的组合框分配给变量combo,但组合框的最终值是在上一次迭代中设置的,因此只反映最后一个值。你可以用一个类来解决这个问题。请查看以下链接:

设置ttk组合框的默认值

最新更新