【发布时间】:2018-02-09 00:43:31
【问题描述】:
我正在尝试制作回合制战斗系统,但在尝试获取按钮以相对访问列表元素时遇到了问题(按钮列表中的按钮访问另一个中相同索引的元素列表)。但是,单击时,每个按钮仅访问列表的最后一个元素。以下是显示相同问题的简化示例代码:
from tkinter import *
root = Tk()
my_list = ['index 0', 'index 1', 'index 2']
buttons = []
for i in range(len(my_list)):
buttons.append(Button(root, text='Button '+str(i), command=lambda: print(my_list[i])))
buttons[i].pack()
我了解,由于我在循环中执行此操作,因此所有按钮都可能访问最后一个元素,因为它是 i 的最新值,但我想不出另一种方法来实现我的目标.更具体地说,从上面的示例代码中得出结论,my_list 表示角色可以采取的操作列表。 buttons 中的每个按钮对应于其中一个操作(单击按钮设置您在回合结束时采取的操作)。通常,我可以更明确地分配动作,但由于有多个战斗机,我选择使用循环并隐式执行,因为my_list 经常更改以反映每个不同战斗机的动作。
我不太清楚为什么会发生这种情况,我也想知道如何实现允许每个按钮访问其在my_list 中的相应元素的目标,因为它可能无法以这种方式完成。感谢您阅读,如果我可以为您澄清任何事情,请告诉我。
【问题讨论】:
标签: python arrays python-3.x for-loop tkinter