2016-11-04 42 views
1

我想在烏龜屏幕上輸出一個變量。但隨着變量的變化,先前的值仍然在屏幕上。因此,這些值是重疊的。方法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

如果它不應該閃爍,你在期待什麼?你的要求是什麼?你想輸出你的最終't'值是2.51嗎? –

回答

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()