我从教科书中复制了以下代码,但它不会运行。我收到错误“builtins.AttributeError:'Turtle'对象没有属性'onkey'”。我知道onkey是一个带有乌龟模块的方法,因为它声明它位于python网站上。我在这里做错了什么?
import turtle
class Etch:
def __init__(self):
self.myT = turtle.Turtle()
self.myT.color('blue')
self.myT.pensize(2)
self.myT.speed(0)
self.distance = 5
self.turn = 10
self.myT.onkey(self.fwd,'Up')
self.myT.onkey(self.bkwd,'Down')
self.myT.onkey(self.left,'Left')
self.myT.onkey(self.right,'Right')
self.myT.onkey(self.quit,'q')
self.myT.listen()
def fwd(self):
self.myT.forward(self.distance)
def bkwd(self):
self.myT.backward(self.distance)
def left(self):
self.myT.left(self.turn)
def right(self):
self.myT.right(self.turn)
def quit(self):
self.myT.bye()
def main(self):
cTurtle.mainloop()
draw = Etch()
draw.main()
完全追溯 Traceback(最近一次调用最后一次): 文件“/cshome/nbrost/Downloads/etch.py”,第36行,in draw = Etch() 在 init 中输入文件“/cshome/nbrost/Downloads/etch.py”,第11行 self.myT.onKey(self.fwd, '上') builtins.AttributeError:'Turtle'对象没有'onkey'属性
答案 0 :(得分:1)
有些龟方法属于Turtle,有些属于Screen。对于初学者,龟模块试图隐藏这种区别。但是,对于更复杂的用法,比如类方法,它很容易绊倒。我已经修改了你的类,以获得一个用于屏幕相关方法的Screen成员:
from turtle import Turtle, Screen
class Etch:
def __init__(self):
self.myT = Turtle()
self.myT.color('blue')
self.myT.pensize(2)
self.myT.speed(0)
self.distance = 5
self.turn = 10
self.myS = Screen()
self.myS.onkey(self.fwd,'Up')
self.myS.onkey(self.bkwd,'Down')
self.myS.onkey(self.left,'Left')
self.myS.onkey(self.right,'Right')
self.myS.onkey(self.quit,'q')
self.myS.listen()
def fwd(self):
self.myT.forward(self.distance)
def bkwd(self):
self.myT.backward(self.distance)
def left(self):
self.myT.left(self.turn)
def right(self):
self.myT.right(self.turn)
def quit(self):
self.myS.bye()
def main(self):
self.myS.mainloop()
draw = Etch()
draw.main()