टिंकर के साथ मेरे वर्तमान प्रोजेक्ट के लिए मुझे अपने जीयूआई में कई पेज रखने की आवश्यकता थी और मैं यहां से लिंक किए गए उत्तर के माध्यम से इसे प्राप्त करने में सक्षम था टिंकर में दो फ़्रेमों के बीच स्विच करें

हालांकि, मुझे इस पूर्ववर्ती कोड को बर्बाद किए बिना रूट विंडो पर कॉल लागू करने का कोई तरीका नहीं मिल रहा है। मैं रूट विंडो को नष्ट करने के लिए एक विजेट बटन बनाने की कोशिश कर रहा हूं लेकिन मैं नष्ट करने के लिए विशिष्ट रूट का पता नहीं लगा सकता।

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
MoonRider 7 जिंदा 2020, 02:53

1 उत्तर

सबसे बढ़िया उत्तर

उस रूट विंडो के संदर्भ का उपयोग करें जिसे आपने StartPage के __init__ में सहेजा है, और उस पर destroy को कॉल करें

def exit(self):
    """Exit program"""
    self.controller.destroy()
2
martineau 7 जिंदा 2020, 00:22