【问题标题】:Display default value for several Combobox with StringVar created in for (tkinter python)显示在 for (tkinter python) 中创建的 StringVar 的几个 Combobox 的默认值
【发布时间】:2020-08-13 09:26:09
【问题描述】:

我想从对象列表(信息)中创建 ComboBox。我创建了下面的程序。我的问题是显示组合框的默认值。我为此使用了 Stringvar。但默认值只显示在最后创建的 Combobox 中。我认为是因为我的 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

【问题讨论】:

  • 试试combo.current(0),这里0是item在列表中的索引位置

标签: python for-loop tkinter combobox


【解决方案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

【讨论】:

    【解决方案2】:

    combo = ttk.Combobox(frame, state="readonly", textvariable=varCombo, values=i.values)

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

    Set a default value for a ttk Combobox

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      相关资源
      最近更新 更多