2016-05-24 7 views
1

Ich suchte auf dieser Website und anderen Websites, und ich kann immer noch nicht herausfinden, wie Sie den Text eines Etiketts in einem anderen Rahmen ändern. Hier ist mein Code:Zugriff auf ein Widget aus einem anderen Rahmen in tkinter

from tkinter import * 

class mainW(Tk): 
    def __init__(self, parent): 
     Tk.__init__(self, parent) 
     self.parent = parent 
     self.widgets() 
    def widgets(self): 
     self.left = leftF(self) 
     self.left.grid(row=0, column=0) 
     self.right = rightF(self) 
     self.right.grid(row=0, column=1) 

class leftF(Frame): 
    def __init__(self, parent): 
     Frame.__init__(self, parent, bg="blue") 
     self.parent = parent 
     self.leftWidgets() 
    def leftWidgets(self): 
     self.Label = Label(self, text="Hello", bg="red", fg="white") 
     self.Label.grid(row=0, column=0, padx=5, pady=5) 

class rightF(Frame): 
    def __init__(self, parent): 
     Frame.__init__(self, parent, bg="white") 
     self.parent = parent 
     self.rightWidgets() 
    def rightWidgets(self): 
     self.Button = Button(self, text="change text", bg="yellow", fg="black", command=self.action) 
     self.Button.grid(row=0, column=0, padx=5, pady=5) 
    def action(self): 
     self.targetFrame = leftF(self) 
     self.targetLabel = self.targetFrame.Label 
     self.targetLabel.config(text="World") 

if __name__=="__main__": 
    mainW(None).mainloop() 

Wesentlichen die Aktion, die der Taste zugeordnet ist auf rightF Wohnsitz sollte den Text des Etiketts auf ändern leftF. Wenn mich jemand in die richtige Richtung lenken kann, würde ich es sehr schätzen.

Vielen Dank.

+0

Wie bei jedem anderen Python-Objekt benötigen Sie lediglich einen Verweis auf dieses Objekt. –

+0

@BryanOakley Das mache ich mit self.targetFrame.Label, aber es scheint nichts zu tun zu haben. –

+0

Leider sind Sie nicht! Sie erstellen ein neues Objekt mit self.targetFrame = leftF (self). Sie müssen auf das Original verweisen. – Jannick

Antwort

3

Das Problem ist, dass Sie mit

self.targetFrame = leftF(self) 

ein neues Objekt erstellen und nicht das Original verweisen. Ändern Sie die Aktionsfunktion zu

und es wird funktionieren.

+0

Ehrfürchtig. Ich danke dir sehr. –