我有一個online tutorial的以下代碼來學習基於事件的編程,方法是在點擊鼠標時使停止燈改變狀態。這裏是我的代碼的全部:Python Turtle 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
在本教程中,他們使用:
wn.mainloop()
但我得到的錯誤:
File "stopLights.py", line 51, in <module>
wn.mainloop()
AttributeError: '_Screen' object has no attribute 'mainloop'
並有能力使用
turtle.mainloop()
爲什麼區別?我在Ubuntu中使用Python 2.7;該示例在PyScripter中。提前致謝。
啊,謝謝你清理它。 – DDauS
僅供參考,沒有.mallloop()*方法*的龜對象 - turtle.mainloop()是一個*函數*調用龜圖書館。 Python 2將mainloop()定義爲頂級函數,它是TK的同義詞.mainloop - Python 3將mainloop()定義爲Screen方法(通過TurtleScreen,通過TurtleScreenBase),它調用TK.mainloop(),並且像許多其他Screen方法也被定義(以編程方式)爲頂級函數,該函數在唯一的Screen實例上調用相同名稱的方法。 Python 2 .mainloop()用法應該在Python 3中工作,但反過來取決於它是如何被調用的。 – cdlane
@cdlane _ >>龜的對象沒有.mainloop()方法 - turtle.mainloop()是一個函數調用龜圖庫。 請你詳細說明一下嗎?我認爲所有的方法都是與一個對象相關的函數。 – DDauS