【发布时间】:2017-11-20 08:23:45
【问题描述】:
背景:
具有“跳过组合框”小部件的 GUI 表允许用户跳过当前行执行。此 GUI 中的行数各不相同。这个“跳过”是使用 for 循环创建的。
在选择“开”或“关”A bind进程执行一个名为self.but_callback的方法,执行其余的代码。
目标:
将i 值传递给self.but_callback,以及event 所需的bind。
下面的代码显示了尝试将i 值直接传递给self.but_callback(event,i) 但是 而不是分配正确的i 值,它为每个skip_button 传递for 循环的最后一个值已创建。
问题:如何在循环中传递正确的i 值,当需要使用lambda 函数传递2 个参数时。
没有找到任何结合这两个问题的答案。
for i in range(len(data_from_file)):
#Skip button
self.var.append(tk.StringVar())
self.var[7].set('On')
skip_button = ttk.Combobox(inner_frame, width=5, textvariable=self.var[7], values=['On','Off'],state='readonly', justify=tk.CENTER)
skip_button.bind('<<ComboboxSelected>>',lambda event: self.but_callback(event,i))
skip_button.grid(row=i+1, column=7, padx=8)
def but_callback(self,event,x):
print(x)
【问题讨论】:
-
在问这个问题之前你有没有做任何研究?可能有数百个问题的答案与循环创建小部件有关。
-
是的,我做到了!我发现的所有内容都没有解释如何将附加参数传递给方法。
-
lambda event, x=i : self.but_callback(event, x) -
顺便说一句:
lambda in loop是常见问题 - SO 和互联网上有很多问题和答案。
标签: python lambda tkinter combobox