最近,我在python上弄清楚了如何制作一条直线。
我现在想做的是知道如何用移动的第二手(分钟)和没有时针的时钟动画。
我要实现的目标:
由于它们是屏幕截图,因此不会显示移动
我的代码
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)
如果有人提供了如何设置时钟,这也会有所帮助
答案 0 :(得分:0)
不清楚您要问的是什么,但我假设这是两件事:首先,如何添加另一条移动线;第二,如何设置这些线的角度以匹配实际(本地)时间。我对下面的代码进行了重新处理以完成这两项工作,并且花费了一个小时的时间,而且成本很低。要考虑的事情:
您不想用一只一只乌龟做这件事-您想要至少两只。否则,当您致电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()