简体   繁体   中英

creating multiple buttons with different names in tkinter

I need to create multiple buttons with different names (each new name is equal to the name of the previous button + the iterating value at that moment.) Please help me out, here is my code.

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()

The looping conditions that I have used our correct. The only help I need is to find a way to store each new button with a new name into the 'buttons' list.

Your issue is not what you think it is. It can be easily solved by changing:

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

The reason this works is because, in your version, you are sticking the variable j in all of your commands, and they will all use whatever the final value of j is. In the second version you are sticking the current value of j in your command.

To understand this better all we have to do is expand the 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM