turtle 模块中的 onKey 方法
onKey method in turtle module
我从教科书上复制了以下代码,但不会运行。我收到错误 "builtins.AttributeError: 'Turtle' object has no attribute 'onkey'"。我知道 onkey 是一个带有 turtle 模块的 methon,因为它声明它在 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()
完整追溯
追溯(最近一次通话):
文件“/cshome/nbrost/Downloads/etch.py”,第 36 行,位于
绘制=蚀刻()
init 中的文件“/cshome/nbrost/Downloads/etch.py”,第 11 行
self.myT.onKey(self.fwd,'Up')
builtins.AttributeError: 'Turtle' 对象没有属性 'onkey'
有些turtle方法属于Turtle,有些属于Screen。对于初学者,turtle 模块试图隐藏这种区别。但是,对于更复杂的用法,如 class 方法,很容易被绊倒。我已经修改了您的 class 以拥有一个用于屏幕相关方法的 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()
我从教科书上复制了以下代码,但不会运行。我收到错误 "builtins.AttributeError: 'Turtle' object has no attribute 'onkey'"。我知道 onkey 是一个带有 turtle 模块的 methon,因为它声明它在 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()
完整追溯 追溯(最近一次通话): 文件“/cshome/nbrost/Downloads/etch.py”,第 36 行,位于 绘制=蚀刻() init 中的文件“/cshome/nbrost/Downloads/etch.py”,第 11 行 self.myT.onKey(self.fwd,'Up') builtins.AttributeError: 'Turtle' 对象没有属性 'onkey'
有些turtle方法属于Turtle,有些属于Screen。对于初学者,turtle 模块试图隐藏这种区别。但是,对于更复杂的用法,如 class 方法,很容易被绊倒。我已经修改了您的 class 以拥有一个用于屏幕相关方法的 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()