Как найти tkinter root окно для уничтожения? - PullRequest
1 голос
/ 07 января 2020

Для моего текущего проекта с tkinter мне нужно было иметь несколько страниц в моем GUI и я смог добиться этого с помощью ответа, который я привел здесь Переключение между двумя кадрами в tkinter .

Однако я не могу найти способ реализовать вызов окна root без разрушения этого существующего кода. Я пытаюсь создать кнопку виджета, чтобы уничтожить окно root, но не могу найти указатель c root для уничтожения.

from tkinter import *

class MainApp(Tk):
    """Class that displays respective frame"""
    def __init__(self):
        Tk.__init__(self)
        self.winfo_toplevel().title("YouTube Ripper and Editor")
        self.resizable(0, 0)
        container = Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}
        for F in (StartPage, Downloader, Audio_Player, Config, About):
            page_name = F.__name__
            frame = F(parent=container, controller=self)
            self.frames[page_name] = frame
            frame.grid(row=0, column=0, sticky="NSEW")

        self.show_frame("StartPage")

    def show_frame(self, page_name):
        """Raise called frame"""
        frame = self.frames[page_name]
        frame.tkraise()


class StartPage(Frame):
    """Class that contains the start page"""
    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        self.configure(bg = f_color)
        self.controller = controller
        b_font = Font(family = "Franklin Gothic Book", size = 12)

        titleLabel = Label(self, text="Youtube Ripper and Editor", font = ("Franklin Gothic Book", 16,  "bold"), bg = f_color)
        titleLabel.pack(side="top", fill="x", pady= 30)

        button1 = Button(self, text="Downloader", command=lambda: controller.show_frame("Downloader"),
                            font = b_font, bg = b_color, activebackground = bp_color)
        button2 = Button(self, text="Audio Player", command=lambda: controller.show_frame("Audio_Player"),
                            font = b_font, bg = b_color, activebackground = bp_color)
        button3 = Button(self, text="MP3 Configurator", command=lambda: controller.show_frame("Config"),
                            font = b_font, bg = b_color, activebackground = bp_color)
        button4 = Button(self, text="About", command=lambda: controller.show_frame("About"),
                            font = b_font, bg = b_color, activebackground = bp_color)
        button5 = Button(self, text="Exit", command=self.exit, font = b_font, bg = b_color, activebackground = bp_color)
        # button1.pack(fill = 'x')
        # button2.pack(fill = 'x')
        # button3.pack(fill = 'x')
        # button4.pack(fill = 'x')
        button5.pack(fill = 'x')


    def exit(self):
        """Exit program"""
        MainApp.destroy()


def main():
    app = MainApp()
    app.mainloop()


main()

1 Ответ

1 голос
/ 07 января 2020

Используйте ссылку на окно root, которое вы сохранили в StartPage __init__, и наберите destroy для этого

def exit(self):
    """Exit program"""
    self.controller.destroy()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...