在tkinter中创建多个具有不同名称的按钮

问题描述

我需要创建多个具有不同名称的按钮(每个新名称都等于前一个按钮的名称+当时的迭代值。)请帮帮我,这是我的代码

buttons = [0]*len(gg.allStudents)

for j in range(len(gg.allStudents)):
    buttons[j] = tk.Button(wind,text=gg.allStudents[j].name,height = 2,width = 20,command=lambda: plotMarks(j))
    buttons[j].pack()

我使用正确的循环条件。我唯一需要的帮助是找到一种方法来将每个具有新名称的新按钮存储到“按钮”列表中。

解决方法

您的问题不是您想的那样。通过更改即可轻松解决:

command=lambda: plotMarks(j)command=lambda j=j: plotMarks(j)

之所以可行,是因为在您的版本中,您将变量j保留在所有命令中,并且它们将全部使用j的最终值。在第二个版本中,您在命令中保留j当前值。

要更好地理解这一点,我们要做的就是扩展lambdas

def add2(n):
    return n+2    

#equivalent of your current version    
j = 6
def currentLambdaEquivalent():
    global j
    print(add2(j)) 

currentLambdaEquivalent() #8


#equivalent of second version
def alternateLambdaEquivalent(j):
    print(add2(j))
    
alternateLambdaEquivalent(2) #4