У меня есть фрагмент кода для добавления члена в таблицу лидеров, например:
def add_member(tkwindow):
global updated
global isOpen
global added
tkwindow.destroy()
if len(squad) >= 4:
print("Squad full")
return
for x in squad:
if squad_stats['Name'] == x.name:
print('Member Already Added')
added = True
elif squad_stats['Name'] != x.name:
added = False
if not added:
squad.append(SquadMember(squad_stats['Name'], squad_stats['Matches'],
squad_stats['Kills'], squad_stats['Wins'], squad_stats['Plat']))
if isOpen is True:
updated = True
MySquad()
код в конце проверяет, открыта ли таблица лидеров уже. если это обновленное логическое значение становится истинным, то при запуске MySquad () первая строка проверяет, обновлено ли оно, и выполняет вложенную функцию, которая обновляет страницу. Проблема в том, что он не уничтожает должным образом фрейм и не создает новый, он создает новый фрейм сверху, делая его похожим на обновленный до тех пор, пока вы не свернете таблицу лидеров, а под ним все еще будет показан старый не обновленный фрейм. и выплевывает Tkinter TclError. Не уверен почему. Вот код, который обновляет кадр:
def refresh_MySquad():
global isOpen
squad_frame.destroy()
isOpen = False
MySquad()
def remove_member(member):
squad.remove(member)
refresh_MySquad()
def save_squad():
pickle.dump(squad, open('SS.txt', 'wb'))
printed_label = tk.Label(squad_frame, text='Squad Saved!', font=('segoe ui black', '10'), fg="white",
bg='#666666')
printed_label.place(relx=0.25, rely=0.79, relwidth=0.15, relheight=0.1)
for i in range(2, 0, -1):
sleep(1)
printed_label.destroy()
def load_squad():
global squad
squad = pickle.load(open('SS.txt', 'rb'))
refresh_MySquad()
def sort_squad(op):
global squad
if op == 'Matches':
m_sort = sorted(squad, key=attrgetter('matches'), reverse=True)
squad = m_sort
refresh_MySquad()
if op == 'Kills':
k_sort = sorted(squad, key=attrgetter('kills'), reverse=True)
squad = k_sort
refresh_MySquad()
if op == 'Wins':
w_sort = sorted(squad, key=attrgetter('wins'), reverse=True)
squad = w_sort
refresh_MySquad()
# Frame
squad_frame = tk.Frame(root, bg='#666666')
global updated
if updated is True:
updated = False
refresh_MySquad()
if isOpen is False:
squad_frame.place(relx=0.05, rely=0.15, relwidth=0.9, relheight=0.7)
#code goes on...