2013-12-31 2 views
0
def check_answer(self, currentscore): 
    self.user_entry = self.user_entry.get_text() 
    if self.user_entry == self.books: 
     self.current += 1 
     self.total += 1 
     self.currentscore = self.current 
     print "right" 
    else: 
     print "wrong" 
     print self.currentscore 
     print self.total 

나는 그것을 실행할 때 두 번째 텍스트를 넣습니다. File "C:\Python27\guessing.py", line 16, in check_answer self.user_entry = self.user_entry.get_text() AttributeError: 'str' object has no attribute 'get_text' 누군가 나에게 설명해 주시겠습니까? 왜 그것이 단지 한 번 작동하는지 나에게 왜. 또한 프로그램이 if 문을 실행하지 않는 이유는 무엇입니까? 그것은 단지 잘못 말합니다.한 번만 작동하는 프로그램을 수정하는 방법?

self.books = 'hello'

답변

0

당신은 그 내용과 텍스트 상자에 대한 참조를 유지하는 변수를 덮어 씁니다. 따라서 처음으로 check_answer을 실행하면 self.user_entry이 텍스트 상자가되고 해당 메서드 get_text()을 호출하여 사용자가 입력 한 텍스트를 검색 할 수 있습니다. 안타깝게도이 텍스트를 동일한 변수 (self.user_entry =)에 할당하므로 텍스트 상자에 대한 참조가 느슨해집니다. 첫 번째 호출 후 self.user_entry은 첫 번째 호출에서 검색 한 문자열 (str의 인스턴스)입니다.

이 같은 다른 변수 이름을 사용

def check_answer(self, currentscore): 
    self.user_entry_text = self.user_entry.get_text() 
    if self.user_entry_text == self.books: 
     self.current += 1 
     self.total += 1 
     self.currentscore = self.current 
     print "right" 
    else: 
     print "wrong" 
     print self.currentscore 
     print self.total 

또한, 아마도이 클래스의 필드 될 필요가 없습니다, 당신은 또한 self. 부분을 건너 뛸 수 있습니다. 이 경우 동일한 이름 (user_entry)을 사용할 수 있지만 가독성을 위해 변수가 보유하고있는 것을 정확히 나타내는 변수를 호출하는 것이 좋습니다.

user_entry_text = self.user_entry.get_text() 
    if user_entry_text == self.books: 
관련 문제