online tutorialから次のコードを使用して、マウスをクリックすると状態を変更するストップライトを作成してイベントベースのプログラミングを学習します。ここに私のコードの全体です:Python Turtle mainloop()usage
wn.mainloop()
しかし、私はエラーを取得::
import turtle
turtle.setup(400,500)
wn = turtle.Screen()
wn.title("Tess becomes a traffic light!")
wn.bgcolor("lightgreen")
tess = turtle.Turtle()
def draw_housing():
tess.pensize(3)
tess.color("black","darkgrey")
tess.begin_fill()
tess.forward(80)
tess.left(90)
tess.forward(200)
tess.circle(40, 180)
tess.forward(200)
tess.left(90)
tess.end_fill()
draw_housing()
tess.penup()
tess.forward(40)
tess.left(90)
tess.forward(40)
tess.shape("circle")
tess.shapesize(3)
tess.fillcolor("green")
state_num = 0
def nextFSMstate():
global state_num
if state_num == 0:
tess.forward(70)
tess.fillcolor("orange")
state_num = 1
elif state_num == 1:
tess.forward(70)
tess.fillcolor("red")
state_num = 2
else:
tess.back(140)
tess.fillcolor("green")
state_num = 0
wn.onkey(nextFSMstate, "space")
wn.listen()
turtle.mainloop()
# example says wn.mainloop() but I get error. This works though
チュートリアルでは、彼らが使用
File "stopLights.py", line 51, in <module>
wn.mainloop()
AttributeError: '_Screen' object has no attribute 'mainloop'
をして使用する必要が
turtle.mainloop()
なぜ違いがありますか?私はUbuntuでPython 2.7を使用しています。この例はPyScripterにあります。前もって感謝します。
ああ、それをクリアしていただきありがとうございます。 – DDauS
タートルオブジェクトの.mainloop()*メソッド*はありません。turtle.mainloop()は、タートルライブラリを呼び出す*関数です。 Python 2はmainloop()をTK.mainloopの同義語であるトップレベルの関数として定義しています - Python 3はmainloop()をTuk.mainloop()を呼び出すScreenメソッド(TurtleScreen経由、TurtleScreenBase経由)他のScreenメソッドは、唯一のScreenインスタンス上で同じ名前のメソッドを呼び出すトップレベル関数として(プログラムで)定義されています。 Python 2の.mainloop()の使用法はPython 3で動作するはずですが、その逆は呼び出された方法によって異なります。 – cdlane
@cdlane _ >>タートルオブジェクトのmainloop()メソッドはありません - turtle.mainloop()はタートルライブラリへの関数呼び出しです._ これについて詳しく説明できますか?私はすべてのメソッドがオブジェクトに関連付けられた関数だと思った。 – DDauS