2016-05-24 7 views
1

このウェブサイトや他のウェブサイトで検索しましたが、別のフレームにあるラベルのテキストを変更する方法はまだ分かりません。ここに私のコードは次のとおりです。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() 

基本的には、rightF上にあるボタンに割り当てられているアクションがleftF上のラベルのテキストを変更する必要があります。誰かが私を正しい方向に向けることができれば、本当に感謝します。

ありがとうございます。

+0

他のpythonオブジェクトと同様に、必要なのはそのオブジェクトへの参照だけです。 –

+0

@BryanOakleyそれは私がself.targetFrame.Labelでやっていることですが、何もしていないようです。 –

+0

残念ながら、あなたはそうではありません! self.targetFrame = leftF(self)で新しいオブジェクトを作成しています。元のものを参照する必要があります。 – Jannick

答えて

3

問題は、あなたが

self.targetFrame = leftF(self) 

ではなく、元の1を参照すると、新しいオブジェクトを作成しているということです。アクション機能を

def action(self): 
     self.parent.left.Label.config(text="World") 

に変更してください。

+0

素晴らしいです。どうもありがとうございます。 –

関連する問題