简体   繁体   中英

Manually call __init__

So I'm trying to handle two windows in python tkinter that can edit an xml file containing the path to certain images, the problem is the function that reads the file is in the __init__ of my two class windows so whenever I switch between the windows the same images appear. My question is: is there any way to relaunch the classes so that the __init__ will run?

I believe the problem is within the show_frame function since tkraise does not run the functions in the class but just pops whatever is in the class to the top.

class xmleditApp(tk.Tk):

    def __init__(self, *args, **kwargs):

        tk.Tk.__init__(self, *args, **kwargs)
        container = tk.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 (FirstWindow, SecondWindow):

            frame = F(container, self)

            self.frames[F] = frame

            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(FirstWindow)

    def show_frame(self, cont):
        frame=self.frames[cont]
        frame.tkraise()

This is the class that I want to update automatically when I return to it:

class FirstWindow(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)

        secondwindow=tk.Button(self,text="edit xml",command=lambda: controller.show_frame(SecondWindow))
        secondwindow.grid(row=3,column=0)

        def getimagepath():
            doc = parse('pruebasXML.xml')
            paths = doc.getroot()
            path = paths.findall('path')
            pasthlist = []
            for elem in range (0,len(path)):
                pathlist+=[[]]
                for tag in range (0,11):
                    pathlist[elem]+=[path[elem][tag].text]
            return createbutton(pasthlist)

        def createbutton(lst):
            for elem in range(0,len(lst)):
                buttonName=elem
                photo=tk.PhotoImage(file=lst[elem][0]+'.gif')
                buttonName=tk.Button(self, image=photo)
                buttonName.grid(row=2, column=elem)
                buttonName.image=photo

        if os.path.exists('pathsXML.xml')==True:
            getimagepath()

If you have a class called myclass , you can manually call __init__ by using myclass.__init__(self, etc) . Here, self is the self argument, and etc are the other arguments.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM