Python 如何为Tkinter中的一大组复选按钮分配唯一的IntVar-s
我有一大组复选按钮,每个都需要一个唯一的IntVar。 当我执行代码以在单击checkbutton时打印IntVar的值时,除了最后一个之外,其他每个值都打印0,而不是1。 谁能帮我找出这个代码中的问题在哪里Python 如何为Tkinter中的一大组复选按钮分配唯一的IntVar-s,python,tkinter,Python,Tkinter,我有一大组复选按钮,每个都需要一个唯一的IntVar。 当我执行代码以在单击checkbutton时打印IntVar的值时,除了最后一个之外,其他每个值都打印0,而不是1。 谁能帮我找出这个代码中的问题在哪里 import tkinter as tk class application(): def __init__(self): self.win = tk.Tk() self.createWidgets() def createWidget
import tkinter as tk
class application():
def __init__(self):
self.win = tk.Tk()
self.createWidgets()
def createWidgets(self):
a=[]
b=[]
c=[1 for i in range(7)]
k=1
for index, item in enumerate(c):
var=tk.IntVar()
a.append(var)
check=tk.Checkbutton(self.win, text='Button %d' %(k), command= lambda: self.a(var.get()), variable =var)
b.append(check)
b[index].grid(row=k)
k=k+1
def a(self, var):
print(var)
if __name__ == "__main__":
app = application()
app.win.mainloop()
关于您的问题,一个更简单的例子(不使用Tkinter)是:
>>> var = 'foo'
>>> command_late = lambda: var
>>> command_early = lambda v=var: v
>>> command_late(), command_early()
('foo', 'foo')
>>> var = 'bar'
>>> command_late(), command_early()
('bar', 'foo')
如果您希望lambda在定义var时正确查找var的值,“bar”会有点令人惊讶<代码>早命令执行此操作,晚命令不执行此操作
在代码中,使用
command = lambda v=var: self.a(v.get())
甚至
command = lambda var=var: self.a(var.get())
定义lambda时将引用var right,并将其值存储为默认参数。关于您的问题,一个更简单的示例(不使用Tkinter)是:
>>> var = 'foo'
>>> command_late = lambda: var
>>> command_early = lambda v=var: v
>>> command_late(), command_early()
('foo', 'foo')
>>> var = 'bar'
>>> command_late(), command_early()
('bar', 'foo')
如果您希望lambda在定义var时正确查找var的值,“bar”会有点令人惊讶<代码>早命令执行此操作,晚命令不执行此操作
在代码中,使用
command = lambda v=var: self.a(v.get())
甚至
command = lambda var=var: self.a(var.get())
定义lambda时,将引用var right,并将其值存储为默认参数。如您所说,我更改了命令部分,但结果相同。它仍然为每个按钮打印0,但最后一个按钮除外:s@E.Zag哦对我有用。令人惊叹的。。。非常感谢你!我使用了var.get()而不是v.get()。现在我了解了lambda函数的功能。再次感谢:)我像你说的那样更改了命令部分,但结果是一样的。它仍然为每个按钮打印0,但最后一个按钮除外:s@E.Zag哦对我有用。令人惊叹的。。。非常感谢你!我使用了var.get()而不是v.get()。现在我了解了lambda函数的功能。再次感谢:)