Как нарисовать анимацию часов, перемещая линию 2-й руки (минуты) - PullRequest
0 голосов
/ 16 марта 2019

Недавно я выяснил на python, как сделать движущуюся линию.

Теперь я хочу знать, как сделать анимацию часов с движущейся второй рукой (минутами) и без нее.часовая стрелка.

Мой текущий этап анимации движущейся линии: Current state

Что япытаясь достичь:

End result

, так как они являются скриншотами, они не показывают их перемещение

мойкод

import turtle
import time
turtle.hideturtle()

def draw_line(x,y,heading,length,color):
    turtle.up()
    turtle.goto(x,y)
    turtle.down()
    turtle.setheading(heading)
    turtle.color(color)
    turtle.fd(length)

turtle.tracer(0,0)
for heading in range(0,-360*100,-6):
    turtle.clear()
    draw_line(0,0,heading,200,'blue')
    turtle.update()
    time.sleep(1)

также помогло бы, если бы кто-то представил, как нарисовать часы

1 Ответ

0 голосов
/ 16 марта 2019

Не понятно, о чем вы спрашиваете, но я предполагаю, что это две вещи: во-первых, как добавить еще одну движущуюся линию;во-вторых, как установить углы этих линий в соответствии с фактическим (местным) временем.Я переработал ваш код ниже, чтобы сделать обе эти вещи, и бросил в часовую стрелку, а также стоимость низкая.Что следует учесть:

Вы не хотите делать это с одиночной черепахой - вам нужно как минимум с двумя .В противном случае, когда вы звоните clear(), вы теряете все , включая циферблат, и должны его перерисовать.Вы можете обойти это, используя undo(), или, проще говоря, одну черепаху, чьи рисунки являются постоянными (циферблат), и другую, чьи рисунки очищаются на каждом тике (стрелки).

Другие измененияниже: бросание time.sleep() в пользу собственного события ontimer() черепахи;переключение с API-интерфейса, основанного на функции черепахи, на его объектно-ориентированный , чтобы мы могли управлять двумя черепахами.И я переключил черепаху в режим Logo , который устанавливает нулевые градусы в верхней части экрана и устанавливает углы для графики по часовой стрелке вместо противпо часовой стрелке (что полезно, если вы используете часы!)

from turtle import Screen, Turtle, Vec2D
from time import localtime

CENTER = Vec2D(0, 0)

def draw_line(position, heading, length, color):
    hands.up()
    hands.goto(position)
    hands.down()
    hands.setheading(heading)
    hands.color(color)
    hands.forward(length)

def tick():
    time = localtime()

    second_heading = time.tm_sec * 6
    minute_heading = time.tm_min * 6 + second_heading / 60
    hour_heading = time.tm_hour % 12 * 30 + minute_heading / 12

    hands.clear()

    draw_line(CENTER, second_heading, 300, 'red')
    draw_line(CENTER, minute_heading, 200, 'blue')
    draw_line(CENTER, hour_heading, 100, 'green')

    screen.update()
    screen.ontimer(tick, 1000)

screen = Screen()
screen.mode("logo")  # 0 degrees at top, clockwise angles!
screen.tracer(False)  # force manual screen updates

# What this turtle draws is "permanent"
dial = Turtle(visible=False)
dial.penup()
dial.dot()
dial.setx(330)  # remember mode is "logo"
dial.pendown()
dial.circle(330)

# What this turtle draws has to be redrawn on every tick
hands = Turtle(visible=False)

tick()

screen.mainloop()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...