filebuttons=[]
fileframe=Frame(main,height=1080)
fileframe.pack(side="right",fill="both")
file_label=Label(fileframe, text="File Selected: ",font=('Times New Roman',24))
filecommands=[]
for file in get_files():
def temp():
file_label.config(bg="green",text=str("File Selected: "+file))
filecommands.append(temp)
filebuttons.append(Button(fileframe,activebackground="green",text=file, width=300))
for n in range(0,len(filebuttons)):
print(file)
filebuttons[n].config(command=filecommands[n])
for button in filebuttons:
button.pack(side="top")
这段代码用于筛选按钮列表并向其添加命令,使用文件列表中的名称设置标签。但是,它只是将最终名称添加到所有按钮的所有命令中,这意味着它们都将标签设置为最后一个文件的文本。
答案 0 :(得分:2)
问题在于临时性问题。函数使用'文件'的当前值。是,而不是将它添加到列表时的值。这被称为"后期绑定"。要解决这个问题,你需要制作一个closure,它会带来' file'的价值。进入功能。最简单的方法是使用functools.partial
函数:
from functools import partial
for file in get_files():
closure = partial(file_label.config, bg="green", text=str("File Selected: "+file))
button = Button(fileframe,activebackground="green",text=file, width=300, command=closure)
button.pack(side="top")