Мое представление о том, что вы пытаетесь сделать, должно быть таким же, чтобы принимать данные от игрока один за другим, пока все игроки не добавят имя.
Проблема с вашим кодом - for
, он должен завершаться без участия игрока (технически), поэтому я выбрал механизм обновления, который есть у tkinter, когда значение изменяется в winget, которое будет обновляться самостоятельно. привязать к кнопке значение изменения с шагом.
Если вы хотите повторно использовать i
, укажите его в начале def
того же числа
Этот пример работает, ввод initialise_game
такой же, как и раньше, замена конде в середине будет работать нормально, кроме случаев, когда ваш код использует .grid()
, затем замените ask_name.pack()
import tkinter as tk
root = tk.Tk()
root.bg_label = tk.Frame(root)
# Added code, top and bottom are for testing
#--------------------------------------------------------------------------------
root.players_list = [] # Global variabe witch can be accesd by all funcions
i = 1 # This global value is to keep a clear reference on the count of windows
def initialise_game(self, num_of_players):
ask_name = tk.Frame(self)
L = tk.Label(ask_name, text=('What is the name of Player ' + str(i) + '?'))
L.grid(row=0, padx=200, pady=120)
E = tk.Entry(ask_name)
def modify_entry(NULL):
root.players_list.append(E.get())
E.delete(0, 'end')
global i # Change the "search" of values to outside the funtion
i += 1
L.config(text=('What is the name of Player ' + str(i) + '?'))
if (i > num_of_players): # Close the Frame wen all were answered
root.players_list.append(E.get())
ask_name.destroy()
E.bind('<Return>', modify_entry)
E.grid(row=1, padx=200, pady=0)
ask_name.pack() # You can replace it with grin , this moves the Label + Entry were u want
#--------------------------------------------------------------------------------
initialise_game(root.bg_label, 3)
root.bg_label.pack()
root.mainloop()