我正在尝试在tkinter中使用for循环创建按钮。并且通过每次循环传递i计数值作为命令值的参数。因此,当从command值调用函数时,我可以知道按下了哪个按钮并相应地采取行动。问题是,假设长度为3,它将创建3个标题为“Game 1”到“Game 3”的按钮。但是,当按下任何按钮时,打印出的值总是2,即最后一次迭代。因此,似乎这些按钮是作为单独的实体被创建的,但是命令参数中的i值似乎都是相同的。以下是代码:
有没有一种方法可以在每次迭代中获取当前的i值,并将其与特定的按钮关联起来?
此问题可以视为在循环中创建函数的特例。另请参阅lambda函数闭包捕获什么?,以获取更多技术概述。
此外,还可以参考如何将参数传递给Tkinter中的Button命令?,解决将参数传递到Button回调函数的一般问题。
def createGameURLs(self):
self.button = []
for i in range(3):
self.button.append(Button(self, text='Game '+str(i+1),
command=lambda: self.open_this(i)))
self.button[i].grid(column=4, row=i+1, sticky=W)
def open_this(self, myNum):
print(myNum)
有没有一种方法可以在每次迭代中获取当前的i值,并将其与特定的按钮关联起来?
此问题可以视为在循环中创建函数的特例。另请参阅lambda函数闭包捕获什么?,以获取更多技术概述。
此外,还可以参考如何将参数传递给Tkinter中的Button命令?,解决将参数传递到Button回调函数的一般问题。