乌龟删除屏幕上的文字并重写
turtle delete writing on Screen and Rewrite
在我的代码中,在任何函数下,我都会:
t = turtle.Turtle()
t.write(name, font=("Arial", 11, "normal"), align="center")
但是当我换屏的时候,我想把这段文字删掉,在别的地方重写。我知道清空整个屏幕的 "easy way out"。但是有没有办法只删除文字呢?
我也试过在文本上画一个白色方块,但是没用。
有没有人尝试过不同的方法?
起初,我认为这很简单,只需返回同一位置并使用相同的字体但使用白色墨水重写相同的文本即可。令人惊讶的是,这留下了黑色的污迹,并且用了大约 10 次白色覆盖才使它看起来像样。然而,我想到了一个更好的解决方案,使用一个单独的乌龟来写你想要处理的文本,然后在新位置重写文本之前清除那个乌龟,屏幕上的所有其他东西,用不同的乌龟绘制,仍然存在:
import turtle
import time
def erasableWrite(tortoise, name, font, align, reuse=None):
eraser = turtle.Turtle() if reuse is None else reuse
eraser.hideturtle()
eraser.up()
eraser.setposition(tortoise.position())
eraser.write(name, font=font, align=align)
return eraser
t = turtle.Turtle()
t.hideturtle()
t.up()
t.goto(-100,100)
t.write("permanent", font=("Arial", 20, "normal"), align="center")
t.goto(100,100)
eraseble = erasableWrite(t, "erasable", font=("Arial", 20, "normal"), align="center")
time.sleep(1)
eraseble.clear()
t.goto(-100, -100)
erasable = erasableWrite(t, "erasable", font=("Arial", 20, "normal"), align="center", reuse=eraseble)
turtle.done()
您也可以清除这只乌龟,而不是清除整个屏幕。不确定这是否符合您的要求,但您可能想尝试一下。我添加了第二只乌龟来演示屏幕的其余部分不受影响。
import turtle
import time
name = "first text"
t1 = turtle.Turtle()
t1.setposition(0, 0)
t1.write(name, font=("Arial", 11, "normal"), align="center")
t2 = turtle.Turtle()
t2.setposition(0, 30)
t2.write(name, font=("Arial", 11, "normal"), align="center")
time.sleep(1)
name = "new value for name 1"
t1.clear()
t1.write(name, font=("Arial", 11, "normal"), align="center")
在我的代码中,在任何函数下,我都会:
t = turtle.Turtle()
t.write(name, font=("Arial", 11, "normal"), align="center")
但是当我换屏的时候,我想把这段文字删掉,在别的地方重写。我知道清空整个屏幕的 "easy way out"。但是有没有办法只删除文字呢?
我也试过在文本上画一个白色方块,但是没用。
有没有人尝试过不同的方法?
起初,我认为这很简单,只需返回同一位置并使用相同的字体但使用白色墨水重写相同的文本即可。令人惊讶的是,这留下了黑色的污迹,并且用了大约 10 次白色覆盖才使它看起来像样。然而,我想到了一个更好的解决方案,使用一个单独的乌龟来写你想要处理的文本,然后在新位置重写文本之前清除那个乌龟,屏幕上的所有其他东西,用不同的乌龟绘制,仍然存在:
import turtle
import time
def erasableWrite(tortoise, name, font, align, reuse=None):
eraser = turtle.Turtle() if reuse is None else reuse
eraser.hideturtle()
eraser.up()
eraser.setposition(tortoise.position())
eraser.write(name, font=font, align=align)
return eraser
t = turtle.Turtle()
t.hideturtle()
t.up()
t.goto(-100,100)
t.write("permanent", font=("Arial", 20, "normal"), align="center")
t.goto(100,100)
eraseble = erasableWrite(t, "erasable", font=("Arial", 20, "normal"), align="center")
time.sleep(1)
eraseble.clear()
t.goto(-100, -100)
erasable = erasableWrite(t, "erasable", font=("Arial", 20, "normal"), align="center", reuse=eraseble)
turtle.done()
您也可以清除这只乌龟,而不是清除整个屏幕。不确定这是否符合您的要求,但您可能想尝试一下。我添加了第二只乌龟来演示屏幕的其余部分不受影响。
import turtle
import time
name = "first text"
t1 = turtle.Turtle()
t1.setposition(0, 0)
t1.write(name, font=("Arial", 11, "normal"), align="center")
t2 = turtle.Turtle()
t2.setposition(0, 30)
t2.write(name, font=("Arial", 11, "normal"), align="center")
time.sleep(1)
name = "new value for name 1"
t1.clear()
t1.write(name, font=("Arial", 11, "normal"), align="center")