我们可以通过下降到 tkinter 级别来强制海龟执行此操作。虽然我们认为乌龟绘制的东西是死墨水(与成形的乌龟或印章相反),但从 tkinter 的角度来看,它们实际上是活墨水——这就是我们可以清除个人的原因海龟的图纸并致电undo()。这是一个脆弱的例子:
from turtle import Screen, Turtle
from random import random
WIDTH, HEIGHT = 800, 800
DIAMETER = 200
def chameleon(x, y):
turtle.ondrag(None)
overlapping = canvas.find_overlapping(x, -y, x, -y) # adjust to tkinter coordinates
if overlapping:
color = canvas.itemcget(overlapping[0], "fill")
if color:
turtle.fillcolor(color)
turtle.goto(x, y)
turtle.ondrag(chameleon)
screen = Screen()
screen.setup(WIDTH, HEIGHT)
canvas = screen.getcanvas()
turtle = Turtle()
turtle.hideturtle()
turtle.speed('fastest')
turtle.penup()
for x in range(-WIDTH//2, WIDTH//2, DIAMETER):
for y in range(-HEIGHT//2, HEIGHT//2, DIAMETER):
turtle.goto(x + DIAMETER/2, y + DIAMETER/2)
color = random(), random(), random()
turtle.dot(DIAMETER - 1, color)
turtle.home()
turtle.shape('turtle')
turtle.shapesize(2)
turtle.showturtle()
turtle.ondrag(chameleon)
screen.mainloop()
当你在屏幕上拖动海龟时,它会从屏幕上绘制的东西中获取颜色。这不是您看到的清晰乌龟,它正在读取墨水,您可以在移动背景时自己确认。此代码可能是特定于海龟实现的。
我不确定这将如何扩大(或更可能缩小到像素大小的对象),但应该让您了解如果您愿意接受turtle 的 tkinter 基础,或者只是使用 tkinter 本身,会发生什么。