python-3.x 有没有办法让Turtle画一条线,撤消它,然后在一个循环上添加另一条线?[复制]

14ifxucb  于 2023-11-20  发布在  Python
关注(0)|答案(1)|浏览(149)

此问题在此处已有答案

turtle delete writing on Screen and Rewrite(2个答案)
去年关闭。
是的,标题听起来很愚蠢,但听我说:
我正试着做一个时钟程序,我需要分钟和小时的手实际上'移动'自己(如在分钟或小时变化时分别移动)通过撤销一条线并在不同的地方再次绘制它。然而,时钟的指针在程序开始时就转到正确的位置;例如,如果您在2:49,它会把指针放在2:49.然后,当你到达2:50(或任何其他时间,就此而言),指针停留在同一个地方,不随时间更新.奇怪的是?没有错误消息或任何东西(这就是我在堆栈上创建帐户的原因溢出
下面是我使用的代码的相关部分:

import turtle
import datetime

tm_year,tm_mon,tm_mday,tm_hour,tm_min,tm_sec = map(int,time.localtime()[:6])

# I add extra values here to offset it for the next chunk of code
hora = tm_hour+360
minuto = tm_min+360
segundo = tm_sec+360

# I ran out of names for variables in the code so I resorted to español
while True:
    if hora != tm_hour:
        hour.undo()
        hour.seth(90)
        hour.rt(30*tm_hour)
        hour.fd(20)
        hora = tm_hour
    if minuto != tm_min:
        minute.undo()
        minute.seth(90)
        minute.rt(6*tm_min)
        minute.fd(60)
        minuto = tm_min
    if segundo != tm_sec:
        second.undo()
        second.seth(90)
        second.rt(6*tm_sec)
        second.fd(40)
        segundo = tm_sec

字符串

e4yzc0pl

e4yzc0pl1#

turtle graphics suit本质上是一个带有绘制二维图形工具的tkinter gui。与大多数GUI一样,在某些时候需要“给予”程序的控制,并允许GUI的主循环将更新绘制到屏幕上,并允许任何用户交互。因此,任何长时间持续的过程都会导致窗口冻结和不可用。
这就是事件和事件监听器派上用场的地方。为了让你的时钟使用turtle图形工作,允许窗口以每秒为基础不断更新自己,你需要使用事件监听器,比如ontimer监听器。
我给予你一个例子,说明秒针如何使用这种方法操作,剩下的就交给你了。

import turtle
import time

second = turtle.Turtle()

def second_timer():
    turtle.ontimer(second_hand_update, t=1000)

def second_hand_update():
    tm_sec = time.localtime().tm_sec
    second.undo()
    second.seth(90)
    second.rt(6*tm_sec)
    second.fd(100)
    second_timer()
    # second.screen.update()  # uncomment line to turn off the animation

# second.screen.tracer(0)   # uncomment line to turn off the drawing animation
second_hand_update()
turtle.mainloop()

字符串

相关问题