2012-11-11 3 views
0

Tkinter Entry 위젯에 문제가 있습니다. 나는 물건을 테스트하고 Entire self.a에서 타이핑 한 내용을 콜백으로 출력하고 싶습니다. 하지만이 오류가 발생합니다.Tkinter Entry 및 .get() 문제

File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in call return self.func(*args) File "C:/Users/Andy/testimage.py", line 146, in get print a.get(self) NameError: global name 'a' is not defined

누군가 내가 잘못하고있는 것을 말할 수 있는지 궁금합니다. 나는 콜백 함수를 올바르게 링크했다. 왜냐하면 나는 "aasdfasd"라는 프린트를 대신 만들어야하기 때문에 버튼을 누를 때 프린트 할 것이기 때문이다.

def clicked_wbbalance(self): 
    self.top = Toplevel() 
    self.top.title("LASKJDF...") 
    Label(self.top, text="Enter low level").grid(row=0, column=0,padx=10) 
    Label(self.top, text="Enter high level").grid(row=1, column=0,padx=10) 
    Label(self.top, text="Values must be between 0 to 255").grid(row=3, column=0) 
    Button(self.top, text="Ok", command=self.get).grid(row=3, column = 1) 

    self.a =Entry(self.top).grid(row=0, column=1,padx=10) 
    self.b =Entry(self.top).grid(row=1, column=1,padx=10) 

def get(self): 
    print self.a.get(self) 

답변

3

RocketDonkey가 지적했듯이 추적 표시가 게시 한 코드와 일치하지 않습니다. 이 같은 역 추적을 생성합니다 작성된

코드는 :

AttributeError: 'NoneType' object has no attribute 'get' 

루트 문제는 grid 반환 None입니다. 즉, 에 대한 호출 결과가 할당되었으므로 abNone이됩니다. 객체 생성 및 위젯 배치를 다른 행에 배치하여 수정 :

self.a = Entry(self.top) 
self.b = Entry(self.top) 

self.a.grid(row=0, column=1,padx=10) 
self.b.grid(row=1, column=1,padx=10) 
+0

+1 더 나은 설명을 위해 :) – RocketDonkey

+0

일을 정리 해줘서 고마워, 그게 효과가! – user1730056

1

당신의 추적은 print a.get(self) NameError: global name 'a' is not defined을 말한다, 그러나 당신이 게시 코드 (올바른 것으로 나타납니다) 구문 print self.a.get(self)을 사용합니다. 따라서 라인 146을 확인하면 aself으로 시작하지 않습니다. 즉, 인스턴스의 a 속성을 참조하는 대신 정의되지 않은 a을 참조하려고합니다. 줄 0에있는 a 앞에 self을 추가하고 문제가 계속되는지 확인합니다.

+0

안녕하십니까. 답장을 보내 주셔서 감사합니다. 146 번 줄은 내가 OP에 게시 한 코드의 마지막 줄입니다. 이미 자체 앞에 있습니다. self.top을 사용하고 있을지 궁금합니다. 처음 사용했을 때 어떤 영향을 주는지 확신 할 수 없습니다. – user1730056

+0

@ user1730056 흠, 트레이스 백이 정확한 선을 보여주고 있지만 앞에는 '자기'가 없기 때문에 이상합니다. 추적 코드는 코드를 저장 한 후에도 여전히 동일합니까? 적어도 print self.a.get (self)를 포함하는 에러를보아야한다. – RocketDonkey