我正在尝试设置布尔变量" 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)
答案 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所指出的身份。