как заставить треугольник вращаться?
Путем многократной очистки и перерисовки слегка повернутых, когда никто не смотрит:
from turtle import *
def rotate():
clear()
for _ in range(36):
for _ in range(3):
left(120)
fd(100)
left(10)
update()
left(1)
ontimer(rotate, 60)
left(20)
tracer(False)
rotate()
exitonclick()
Этот код хрупок, поскольку некоторые операции могут вызвать обновление экрана, кроме самого update()
, поэтому перестановка кода или замена других методов (например, undo()
) могут не дать желаемого эффекта.
Я хочу перетащить его
Это хитрее, и результат, который вы получите, может зависеть от вашей архитектуры (Unix или Windows.) Мы превратим его в курсор, который можно перетаскивать. Но курсоры рассматривают свои полигоны как заполненные. Таким образом, в зависимости от базовой реализации Tk, ваши результаты могут отличаться. Много.
from turtle import *
def graphic():
penup()
tracer(False)
begin_poly()
for _ in range(36):
for _ in range(3):
left(120)
fd(100)
left(10)
end_poly()
tracer(True)
pendown()
return get_poly()
def drag_handler(x, y):
ondrag(None)
goto(x, y)
ondrag(drag_handler)
register_shape('graphic', graphic())
ondrag(drag_handler)
shape('graphic')
color('black', 'white')
mainloop()
Боюсь, что в Windows этот курсор может выглядеть как большой черный шарик.
Я хочу перетащить его, и я хочу, чтобы он вращался
И я хочу оставить это как упражнение для читателя. Но здесь все равно:
from turtle import *
def rotate():
left(1)
ontimer(rotate, 60)
def graphic():
penup()
tracer(False)
begin_poly()
for _ in range(36):
for _ in range(3):
left(120)
fd(100)
left(10)
end_poly()
tracer(True)
pendown()
return get_poly()
def drag_handler(x, y):
ondrag(None)
goto(x, y)
ondrag(drag_handler)
register_shape('graphic', graphic())
ondrag(drag_handler)
shape('graphic')
color('black', 'white')
rotate()
mainloop()
Опять же, в зависимости от среды, вы можете перетаскивать большой вращающийся черный шарик. Теперь, когда графическое изображение является курсором, часть поворота на намного проще.