如何修复只能运行一次的程序?

时间:2013-12-31 00:24:20

标签: python-2.7 pygtk

    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'

1 个答案:

答案 0 :(得分: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: