我正在尝试将lambda绑定到具有不同事件的按钮。但是,解释器显示TypeError: list indices must be integers or slices, not Event,如果我用buttons_list[z].bind("<Button-3>", lambda i: print(myList[z]))替换buttons_list[z].bind("<Button-3>", lambda i=z: print(myList[i])),则无论按下哪个按钮,它都会打印no。当用buttons_list[z].bind("<Button-3>", print(myList[z]))替换该行时,它只在程序开始时按顺序打印它们,而不是在右击时(如预期的那样)。那么为什么buttons_list.append(tk.Button(self.root, text="Click here" + str(z), command=lambda e=z:print(myList[e])))和buttons_list[z].bind("<Button-3>", lambda i=z: print(myList[i]))的行为不一样呢?
import tkinter as tk
myList = ["foo", 'bar', 'no']
class TestClass:
def __init__(self):
self.num = 0
self.root = tk.Tk()
self.make_buttons()
self.root.mainloop()
def make_buttons(self):
buttons_list = []
for z in range(len(myList)):
buttons_list.append(
tk.Button(self.root, text="Click here" + str(z), command=lambda e=z: print(myList[e])))
buttons_list[z].bind("<Button-3>", lambda i=z: print(myList[i]))
buttons_list[z].pack()
p = TestClass()感谢您的帮助,谢谢您的帮助
发布于 2021-04-02 02:08:15
试试这个:
class TestClass:
...
def make_buttons(self):
buttons_list = []
for z in range(len(myList)):
button = tk.Button(self.root, text="Click here " + str(z), command=lambda z=z: print(myList[z]))
buttons_list.append(button)
button.bind("<Button-3>", lambda event, i=z: print(myList[i]))
button.pack()问题是,在执行command参数时,tkinter没有给它一个参数。.bind的命令使用一个参数(一个事件)来执行。
https://stackoverflow.com/questions/66909295
复制相似问题