【问题标题】:Trying to get the selected Checkbutton's value of Tkinter, but don't work as expected试图获取所选 Checkbutton 的 Tkinter 值,但没有按预期工作
【发布时间】:2013-05-31 23:41:12
【问题描述】:

这是我的 GUI 和代码如下所示, 预期结果是:

一个——打印0

两个 -- 打印 1

三 -- 打印 2

但是,无论选择哪个复选框,程序都会打印“2”。我该如何解决?

from Tkinter import *
root = Tk()
my_list = ['one', 'two', 'three']
cb_value = []
cb = []


def show_index(idx):
    print idx

for idx, each in enumerate(my_list):
    cb_value.append(IntVar())
    cb.append(Checkbutton(root, text=each, variable=cb_value[idx], command=lambda: show_index(idx)))
    cb[idx].pack()
root.mainloop()

谢谢!

【问题讨论】:

    标签: python user-interface tkinter tk


    【解决方案1】:

    请改用lambda idx=idx:show_index(idx)

    “问题”是python函数只绑定闭包中的变量名(例如,参见https://stackoverflow.com/a/11953356/748858)。他们实际上是在调用函数时从适当的位置查找值。在循环完成之前,您的函数永远不会被调用,此时,idx 的值为 2。每个 lambda 函数在调用时都在查找idx,因此它们的值为 2。我在上面展示的技巧使 idx 成为函数的局部变量(而不是通过闭包获取它)。由于我通过使用关键字参数来执行此操作,并且在创建函数时会评估关键字参数,因此您始终会得到正确的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 2016-08-27
      相关资源
      最近更新 更多