龟模块中的onKey方法

时间:2016-11-30 19:09:01

标签: python python-3.x turtle-graphics

我从教科书中复制了以下代码,但它不会运行。我收到错误“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'属性

1 个答案:

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