У меня есть следующий код от 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()
Почему разница? Я использую Python 2.7 в Ubuntu; пример находится в PyScripter. Заранее спасибо.
Ahh, спасибо, что расчистили его. – DDauS
FYI, нет .mainloop() * метод * объекта черепахи - turtle.mainloop() - это * функция * вызов в библиотеку черепах. Python 2 определяет mainloop() как функцию верхнего уровня, которая является синонимом TK.mainloop. Python 3 определяет mainloop() как метод Screen (через TurtleScreen через TurtleScreenBase), который вызывает TK.mainloop(), и, как многие другие методы экрана, также определяются (программно) как функция верхнего уровня, которая вызывает метод с тем же именем на единственном экземпляре Screen. Использование Python 2..mainloop() должно работать в Python 3, но обратное зависит от того, как оно было вызвано. – cdlane
@cdlane _ >> нет метода .mainloop() объекта черепахи - turtle.mainloop() - вызов функции в библиотеку черепах. Не могли бы вы рассказать об этом? Я думал, что все методы - это функции, связанные с объектом. – DDauS