I'm trying to use tkinter buttons to remove elements from the list. When I click on button it removes the last element in the list instead of the one it should: characters.remove(character)
. I think I know why is this happening but I don't know how to fix that.
Example:
column = 1
characters = ['c1', 'c2', 'c3']
for character in characters:
Button(frame, text=character,
command=lambda: (click_sound(), characters.remove(character))).grid(row=1, column=column)
column += 1
Code:
def submit(number, player_index, username, character):
for widget in window_frame.winfo_children():
widget.grid_forget()
settings[f'player_{player_index}_username'] = username.capitalize()
settings[f'player_{player_index}_character'] = character
with open('resources/settings.json', 'w') as f:
dump(settings, f, indent=3)
player_index += 1
if player_index > number:
window.destroy()
for widget in TkinterClass.main_frame.winfo_children():
widget.grid_forget()
Button(TkinterClass.main_frame, text='Play', command=lambda: (PygameClass.click_sound(), startfile('Monopoly.py'), quit()), width=30).grid()
else:
character_index = 1
Label(window_frame, text=f'Enter player\'s {player_index} name: ').grid(row=0, column=0)
name = Entry(window_frame, borderwidth=3)
name.grid(row=0, column=1, columnspan=len(characters))
Label(window_frame, text='Select your character: ').grid(row=1, column=0)
for character in characters:
Button(window_frame, text=character.capitalize(),
command=lambda: (
PygameClass.click_sound(), characters.remove(character),
submit(number, player_index, name.get(), character))).grid(row=1, column=character_index)
character_index += 1
window = Toplevel()
window.title('Monopoly')
window_frame = Frame(window, padx=5, pady=5)
window_frame.grid(padx=5, pady=5)
player_index = 1
column = 1
characters = ['cruise', 'car', 'cap', 'derby']
Label(window_frame, text=f'Enter player\'s {player_index} name: ').grid(row=0, column=0)
name = Entry(window_frame, borderwidth=3)
name.grid(row=0, column=1, columnspan=len(characters))
Label(window_frame, text='Select your character: ').grid(row=1, column=0)
for character in characters:
Button(window_frame, text=character.capitalize(),
command=lambda: (PygameClass.click_sound(), characters.remove(character), submit(number, player_index, name.get(), character)))\
.grid(row=1, column=character_index)
column += 1