Как сохранить имя кнопки из цикла при нажатии?

#python-3.x #tkinter

#python-3.x #tkinter

Вопрос:

Пытаюсь сохранить название кнопок, на которые нажимают, в списке (orderList). Эти кнопки также были сгенерированы из списка (menuList) циклом FOR . Всякий раз, когда нажимается какая-либо кнопка, она сохраняет только последнее значение.

 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)
  

Я просто хочу, чтобы каждая кнопка сохраняла свое имя внутри пустого списка (списка заказов)

Ответ №1:

Это связано с поздним связыванием 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()