Почему этот код для уничтожения фрейма tkinter не работает должным образом? - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть фрагмент кода для добавления члена в таблицу лидеров, например:

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...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...