Python 3.x 单击时如何从循环中存储按钮名称?

Python 3.x 单击时如何从循环中存储按钮名称?,python-3.x,tkinter,Python 3.x,Tkinter,尝试将单击的按钮的名称存储在列表(orderList)中。这些按钮也是由FOR循环从列表(menuList)生成的。无论何时单击任何按钮,它都只存储最后一个值 menuList = ['egg', 'bacon', 'bread'] orderList = [] def makeOrder(arg): orderList.append(arg) print (orderList) for btn in mealList: ttk.Button(mainframe, t

尝试将单击的按钮的名称存储在列表(orderList)中。这些按钮也是由FOR循环从列表(menuList)生成的。无论何时单击任何按钮,它都只存储最后一个值

menuList = ['egg', 'bacon', 'bread']
orderList = []

def makeOrder(arg):
    orderList.append(arg)
    print (orderList)

for btn in mealList:
    ttk.Button(mainframe, text=btn, command=lambda: makeOrder(btn)).grid(column=1, row=5)

我只想让每个按钮在空白列表中存储它的名字(OrrrdList.)/P>< P>这是因为Python的后期绑定,您可以阅读更多关于它的内容。简而言之,您可以通过修改

lambda
函数来解决此问题:

from tkinter import ttk
import tkinter as tk

menuList = ['egg', 'bacon', 'bread']
mealList = ["breakfast","lunch","dinner"]
orderList = []

root = tk.Tk()
mainframe = tk.Frame(root)
mainframe.pack()

for num,btn in enumerate(mealList):
    ttk.Button(mainframe, text=btn,command=lambda x=btn: orderList.append(x)).grid(column=num, row=5)

tk.Button(mainframe,text="result",command=lambda: print (orderList)).grid(row=6,column=0)

root.mainloop()

这是由于python的后期绑定,您可以阅读更多关于它的内容。简而言之,您可以通过修改
lambda
函数来解决此问题:

from tkinter import ttk
import tkinter as tk

menuList = ['egg', 'bacon', 'bread']
mealList = ["breakfast","lunch","dinner"]
orderList = []

root = tk.Tk()
mainframe = tk.Frame(root)
mainframe.pack()

for num,btn in enumerate(mealList):
    ttk.Button(mainframe, text=btn,command=lambda x=btn: orderList.append(x)).grid(column=num, row=5)

tk.Button(mainframe,text="result",command=lambda: print (orderList)).grid(row=6,column=0)

root.mainloop()