2016-11-30 11 views
0

私の教科書から次のコードをコピーしましたが、実行されません。 "builtins.AttributeError: 'Turtle'オブジェクトに 'onkey'属性がありません。私はonkeyが、それがpythonのウェブサイト上にあると述べているので、カメのモジュールを持つメタンであることを知っています。私はここで間違って何をしていますか?タートルモジュールのonKeyメソッド

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で ファイル "/cshome/nbrost/Downloads/etch.py​​"、ライン36、 'タートル' オブジェクトが

+0

フルトレースバックしてください。インデントも修正しますか? –

+0

申し訳ありませんが、私はエディタからコピーしたときにインデントが台無しになった – Nolan

答えて

1

一部をなし属性 'onkey' がありません:のinit self.myT.onKey(self.fwd、 'アップ') builtins.AttributeErrorで/Downloads/etch.py​​」、11行目、タートルのメソッドはタートルに属し、一部はスクリーンに属します。初心者のために、タートルモジュールはこの区別を隠そうとします。しかし、クラスメソッドのようなもっと洗練された使い方では、簡単に移動できます。画面関連のメソッドで使用される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() 
+0

恐ろしいおかげで。私はスクリーンと何か関係があると思った。私は画面/ウィンドウでメソッドを使用する必要がある他のモジュールを使用しました。 – Nolan

関連する問題