在for loop widget命令中保留唯一变量

时间:2018-02-25 03:59:47

标签: python tkinter lambda optionmenu

我在一个optionmenu小部件中添加/删除字符串,并且我已经了解到在添加一个将小部件变量设置为该字符串的字符串时必须运行命令或函数。这是在最初创建窗口小部件时提供的字符串自动完成的。

from tkinter import *

def _print(var, string):
    print(string)
    var.set(string)

lst = ['hello', 'bob', 'testing']

main = Tk()
var = StringVar()
options = OptionMenu(main, var, 'option1')
options.grid()

for string in lst:
    options['menu'].add_command(label=string, command=lambda: _print(var, string))

main.mainloop()

当您单击菜单中的每个选项时,它应该在窗口小部件上打印字符串,以便您知道已选中它。问题是for循环设置所有命令以使用相同的变量。看起来它只是没有为每个运行的行保留一个唯一的变量。我已经尝试了lambda event, i=string: _print(var, i)但是即使我将_print函数设置为接收事件,lambda总是说它缺少一个事件。也许我试图把i =字符串部分弄错或者不能这样做。

如何保留变量" string"对于每个运行的add_command行都是唯一的?

0 个答案:

没有答案