我在Python枚举中遇到了我认为不直观的行为。这是代码:
import tkinter as tk
from enum import Enum,auto
class Color(Enum):
WHITE = auto()
YELLOW = auto()
ORANGE = auto()
GREEN = auto()
BLUE = auto()
BROWN = auto()
BLACK = auto()
def buttonaction(color):
print(f'Clicked on {color.name}')
root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
mixedList = [Color.WHITE,Color.WHITE,Color.GREEN,Color.BLUE,Color.YELLOW]
for item in mixedList:
tk.Button(frame,text=item.name,command=lambda: buttonaction(item)).pack()
root.mainloop()
此脚本创建一个Tkinter窗口,其中包含一堆在列表上迭代的按钮。问题是在按钮上正确设置了名称,但是传递给命令的参数始终是循环中“ item”的最后一个值。
这是预期的行为吗?我该如何避免呢?