【问题标题】:onKey method in turtle moduleTurtle 模块中的 onKey 方法
【发布时间】:2016-11-30 19:09:00
【问题描述】:

我从教科书中复制了以下代码,但它不会运行。我收到错误“builtins.AttributeError:'Turtle'对象没有属性'onkey'”。我知道 onkey 是一个带有 turtle 模块的方法,因为它声明它在 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'

【问题讨论】:

  • 请完整回溯。还修复缩进?
  • 抱歉,当我从编辑器复制时,缩进搞砸了

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


【解决方案1】:

一些turtle方法属于Turtle,一些属于Screen。对于初学者来说,turtle 模块试图隐藏这种区别。但是,对于更复杂的用法,比如类方法,很容易被绊倒。我已经修改了您的课程,使其拥有一个用于与屏幕相关的方法的 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()

【讨论】:

  • 非常感谢。我认为它必须与屏幕有关。我使用了其他需要在屏幕/窗口上使用方法的模块。
猜你喜欢
  • 1970-01-01
  • 2020-06-20
  • 2017-12-05
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 2011-05-03
相关资源
最近更新 更多