Python:我尝试设置变量时的AttributeError(布尔值)

时间:2016-01-20 01:36:25

标签: python

我正在尝试设置布尔变量" self.running"以True为依据,作为检查以显示应用程序正在运行,并将刷新画布。但是,每当我运行此代码时,我都会收到错误消息: "第29行,在主循环中     如果self.running == True: AttributeError:' Game'对象没有属性' running'"  实际的代码就是

    self.running = True

我在这里看不到实际的问题,因为我是一般的python和编码世界的新手,我搜索过但发现了不同的场景,然后我拥有的并且无法应用他们的解决方案我的问题。谢谢。

编辑:代码

   class Game:
def _init_(self):
    self.tk = Tk()
    self.running = False
    self.tk.title("Man runs to door. Wins nobel prize.")
    self.tk.resizable(0, 0)
    self.tk.wm_attributes("-topmost", 1)
    self.canvas = Canvas(self.tk, width=500, height=500, \
        highlightthickness=0)
    self.canvas.pack()
    self.tk.update()
    self.canvas_height = 500
    self.canvas_width = 500
    self.bg = PhotoImage(file="background.gif")
    w = self.bg.width()
    h = self.bg.height()
    for x in range(0, 5):
        for y in range(0, 5):
            self.canvas.create_image(x * w, y * h, \
                image=self.bg, anchor='nw')
    self.sprites = []
    self.running = True

def mainloop(self):
    while 1:
        if self.running == True:
            for sprite in self.sprites:
                sprite.move()
        self.tk.update_idletasks()
        self.tk.update()
        time.sleep(0.01)

这是整个初始化区域和主循环。

那么这是一个正确的代码版本吗?

    class Game:
def _init_(self):
    self.tk = Tk()
    self.running = False
    self.tk.title("Man runs to door. Wins nobel prize.")
    self.tk.resizable(0, 0)
    self.tk.wm_attributes("-topmost", 1)
    self.canvas = Canvas(self.tk, width=500, height=500, \
        highlightthickness=0)
    self.canvas.pack()
    self.tk.update()
    self.canvas_height = 500
    self.canvas_width = 500
    self.bg = PhotoImage(file="background.gif")
    w = self.bg.width()
    h = self.bg.height()
    for x in range(0, 5):
        for y in range(0, 5):
            self.canvas.create_image(x * w, y * h, \
                image=self.bg, anchor='nw')
    self.sprites = []
    self.running = True

def mainloop(self):
    while 1:
        if self.running == True:
            for sprite in self.sprites:
                sprite.move()
        self.tk.update_idletasks()
        self.tk.update()
        time.sleep(0.01)

4 个答案:

答案 0 :(得分:1)

根据更新后的问题 - 您的mainloop不在Game课程内,因此self无法按预期工作。您需要正确缩进代码:

class Game
    def mainloop(self):
        while 1:
            if self.running == True:
                for sprite in self.sprites:
                    sprite.move()
            self.tk.update_idletasks()
            self.tk.update()
            time.sleep(0.01)

game = Game()
game.mainloop()

确保mainloop内的Game缩进了4个空格。

答案 1 :(得分:1)

我猜你的代码中可能有一个名为Game的类,你只是错过了#34; self.running"在初始化中:

class Game:
    def __init__(self):
        self.running = False

答案 2 :(得分:0)

此错误消息表示您的self.running尚未初始化。

我不确定你在哪里指定self.running = True

最好的方法是将此代码添加到__init__方法

答案 3 :(得分:0)

问题似乎出现在def __init__(self):

请注意,init被两个下划线包围,而不只是像示例代码一样。

其余的看起来很好,但是写作会更加pythonic if self.running: 而不是将其与True进行比较。

另外,请务必检查Martin Konecny所指出的身份。