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()