我第一次尝试使用lambda event:
和tkinter,在循环使用它时遇到了困难。
我了解使用i
时需要指定lambda
等于什么,但是我不确定如何与event
结合使用。我希望tkinter按钮与键盘输入相匹配,以便它们都打印相应的文本,因此当我在键盘上按1
时,程序将打印1
,依此类推。
numbers = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
counter = 0
for x in range(len(numbers)):
key = Button(w, text=numbers[counter],
command=lambda i=numbers[counter]: do_something(i))
root.bind(number[counter], lambda event:
do_something(numbers[counter]))
counter += 1
def do_something(event, text):
print(text)
现有的tkinter按钮非常有用,因为在i=numbers[counter]
之后有lambda
,但是我得到IndexError: list index out of range
是因为绑定do_something
时没有功能。
我该如何解决这个问题?
TL; DR 我想这样做,但我不知道怎么做:
root.bind(test[counter], lambda event: i=numbers[counter]: self.keyboard_input(numbers[counter]))
答案 0 :(得分:1)
同样的想法,您正在创建一个具有默认值的可选参数:
lambda event, i=numbers[counter]: do_something(i)
(尽管i
是一个奇怪的名称选择。)
考虑改为调用一个函数,这样就无需重复进行这种破解,并且如果您不使用外部计数器作为索引,则无需直接遍历列表项:
def create_button(number):
key = Button(w, text=number,
command=lambda: do_something(number))
root.bind(number, lambda event: do_something(number))
numbers = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
for number in numbers:
create_button(number)