Python - Элемент Listbox не завершается при переключении windows в Tkinter - PullRequest
1 голос
/ 07 мая 2020

У меня проблема с моим кодом Python, я использую Tkinter для создания приложения и переключения между windows, один из windows имеет следующий код:

def __init__(self, master):
    tk.Frame.__init__(self, master)
    master.title("Chain Targets:")
    master.geometry("400x800")
    tk.Label(self, text="Chain Targets").grid()
    self.sbox = tk.Listbox(master)
    self.sbox.grid(row=0, column=0)
    number=1
    for k in sorted(target_list, key=target_list.get, reverse=True):
        place_target= str(number) + "   " + k + "    " + str(target_list[k])
        self.sbox.insert(number,place_target)
        number+=1
    tk.Scrollbar.grid(self)

    tk.Button(self, text="Main Menu",
              command=lambda: master.switch_frame(MainPage)).grid()

Теперь все работает нормально, за исключением того, что при использовании функции switch_frame Listbox остается на новом экране, функция switch_frame следующая:

    def switch_frame(self, frame_class):
    """Destroys current frame and replaces it with a new one."""
    new_frame = frame_class(self)
    if self._frame is not None:
        self._frame.destroy()
    self._frame = new_frame
    self._frame.grid()

почему-то я не могу осознать тот факт, что self._frame.destroy () не уничтожает Listbox и остается в каждом окне вверху, в остальном мой код делает все, что он должен делать. Надеюсь, кто-то знает, что мне не хватает.

1 Ответ

1 голос
/ 07 мая 2020

Проблема в том, что вы установили master как родительский элемент списка. Вместо этого используйте self.sbox = tk.Listbox(self). Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...