我想在Turtle屏幕上输出一个变量。但随着变量的变化,之前的值仍然在屏幕上。因此,这些值是重叠的。方法turtle.clear()
无法解决问题,因为它会导致值在屏幕上闪烁。
# -*- coding: utf-8 -*-
import turtle
from math import *
s = turtle.Screen()
body = turtle.Turtle()
time_t = turtle.Turtle()
time_t.penup() # For time output
time_t.ht()
def Motion(A=100, omega=5, N=2):
n = 0
t = 0
def x_pos(t):
return A*cos(0.5*omega*t) # x
def y_pos(t):
return A*sin(1*omega*t) # Кy
body.setposition(x_pos(t),y_pos(t))
body.pendown()
while n<N:
body.setposition(x_pos(t),y_pos(t))
t = round(t + 0.01,2)
time_t.setposition(200,200) # In this position I want to output variable
time_t.write("t = " + str(t)) # Show the time variable t on screen
if int(round(t / (2*pi/omega),2)) == n + 1:
n = n + 1
body.penup()
body.color('red')
body.shape('circle')
Motion()
turtle.done()
答案 0 :(得分:2)
我们可以采取一些措施来改善这种状况。第一种是使用乌龟的撤消功能删除旧时信息作为清除它的方法。其次,我们可以使用tracer()
和update()
来控制动画更新,以便控制闪烁:
from turtle import Turtle, Screen
from math import pi, sin, cos
screen = Screen()
body = Turtle(shape="circle")
body.color('red')
body.penup()
time_t = Turtle(visible=False) # For time output
time_t.penup()
time_t.setposition(200, 200) # In this position I want to output variable
time_t.write("t = " + str(0))
screen.tracer(0) # Control animation updates ourself
def Motion(A=100, omega=5, N=2):
n = 0
t = 0
def x_pos(t):
return A * cos(0.5 * omega * t) # x
def y_pos(t):
return A * sin(1 * omega * t) # Ky
body.setposition(x_pos(t), y_pos(t))
body.pendown()
while n < N:
body.setposition(x_pos(t), y_pos(t))
t = round(t + 0.01, 2)
time_t.undo() # undraw the last time update
time_t.write("t = " + str(t)) # Show the time variable t on screen
screen.update()
if int(round(t / (2 * pi / omega), 2)) == n + 1:
n = n + 1
Motion()
screen.exitonclick()
BTW,非常酷的乌龟使用!让我们更进一步:让运动连续;在动画期间的任何时候启用退出点击;不要让尸体龟可见,直到它处于初始位置;提高字体大小,以便我们看到时间:
from turtle import Turtle, Screen
from math import pi, sin, cos
def motion():
global n, t
body.setposition(x_pos(t), y_pos(t))
t = round(t + 0.01, 2)
time_t.undo() # undraw the last time update
time_t.write("t = " + str(t), font=font) # Show the time variable t on screen
screen.update()
if int(round(t / (2 * pi / omega), 2)) == n + 1:
n = n + 1
if (n >= N):
n = t = 0
screen.ontimer(motion, 10)
def x_pos(t):
return A * cos(0.5 * omega * t) # x
def y_pos(t):
return A * sin(1 * omega * t) # Ky
A = 100
omega = 5
N = 2
n = t = 0
font = ("Arial", 12, "normal")
screen = Screen()
screen.tracer(0) # Control animation updates ourself
body = Turtle(shape="circle", visible=False)
body.color('red')
body.penup()
body.setposition(x_pos(t), y_pos(t))
body.pendown()
body.showturtle()
time_t = Turtle(visible=False) # For time output
time_t.penup()
time_t.setposition(200, 200) # In this position I want to output variable
time_t.write("t = " + str(0))
screen.ontimer(motion, 100)
screen.exitonclick()