2014-12-07 12 views
0

어떤 이유로 나는 자식 창에서 항목을 가져올 수 없습니다. 하위 창에서 항목을 가져온 다음 직사각형을 그래프로 표시하려고합니다. 난 얻을 오류 : X = 플로트 (self.txtSide.get()) AttributeError가 'MainWindow를'객체에는 속성이없는 'txtSide'하위 창에서 항목 가져 오기?

import tkinter as tk 
import turtle 
tu=turtle 


class MainWindow(tk.Frame): 
    def __init__(self, *args, **kwargs): 
     tk.Frame.__init__(self, *args, **kwargs) 
     self.button = tk.Button(self, text="Cupe",command=self.Cupe) 
     self.button.pack(side="top") 

    def Cupe(self): 

     c = tk.Toplevel(self) 
     c.wm_title("Cupe") 

     lab=tk.Label(c,text="Side") 
     lab.pack() 

     c.txtSide=tk.Entry(c) 
     c.txtSide.pack() 


     button=tk.Button(c,text="Graph",command=self.graphCupe) 
     button.pack(side="bottom") 


    def graphCupe(self): 
     x=float(self.txtSide.get()) 
     tu.forward(x) 
     tu.left(90) 
     tu.forward(x) 
     tu.left(90) 
     tu.forward(x) 
     tu.left(90) 
     tu.forward(x) 

if __name__ == "__main__": 
    root = tk.Tk() 
    main = MainWindow(root) 
    main.pack(side="top", fill="both", expand=True) 
    root.mainloop() 

답변

1

문제 graphCupeself를 지칭한다는 것이다 MainWindow 인스턴스이고 하위 창은 아닙니다. 하위 창을 graphCupe 함수에 전달해야합니다.

def Cupe(self): 
     ... 
     button=tk.Button(c,text="Graph",command=lambda: self.graphCupe(c)) 
     button.pack(side="bottom") 

    def graphCupe(self,window): 
     x=float(window.txtSide.get()) 
     ... 

는 이제 graphCupe 함수가가 작동하는 데 필요한 창을 소요하고 버튼이 함수를 호출하고 그것을 자식 창을 통과 :이 그것을 할 수있는 하나 개의 방법이 될 것입니다.

+0

다른 해결책은 물론'txtSide'를'self' ('self.txtSide = ...')의 속성으로 만드는 것입니다. –

+0

그럴 수도 있습니다,하지만 다른 자식 창이 열리면 속성. 그런 다음 자식 창 1이'graphCupe()'를 호출하려고하면 하위 창 2의'txtSide' 속성을 사용합니다. –