你能关闭 tkinter window 中嵌入的 TurtleScreen 的跟踪器吗?

Can you turn off tracer for TurtleScreen embedded in tkinter window?

我在 turtle 中有一个功能齐全的游戏。我将它移到 tkinter window 并且它的工作方式与以前类似,但 screen.tracer(0) 似乎没有做任何事情(这意味着它不会按预期停止屏幕更新)。此外,screen.addshape("shape") 似乎也不起作用,如果有人对此有想法的话。我想知道当屏幕嵌入到 tkinter canvas 中时,这两种方法是否实际上都不起作用。其余方法,例如 screen.listen() 按预期工作。

这里是一些示例代码,我试图让它工作,但跟踪器显然保持打开状态,因为当按下 "Up" 时乌龟继续在屏幕上绘制:

from turtle import TurtleScreen, RawTurtle
from tkinter import *


def go():
    turtle.forward(20)


window = Tk()
canvas = Canvas()
canvas.pack()
screen = TurtleScreen(canvas)
turtle = RawTurtle(canvas)

screen.tracer(0)

screen.listen()
screen.onkey(fun=go, key="Up")

window.mainloop()

问题是您用 Canvas 而不是 TurtleScreen 初始化了 RawTurtle()。如果我们改为 turtle = RawTurtle(screen) 一切都与 standalone turtle:

一样
from turtle import TurtleScreen, RawTurtle
from tkinter import *

def go():
    turtle.forward(20)

window = Tk()
canvas = Canvas()
canvas.pack()

screen = TurtleScreen(canvas)
turtle = RawTurtle(screen)

screen.tracer(0)

screen.onkey(fun=go, key="Up")
screen.listen()

screen.mainloop()

如果您现在添加 screen.update() 作为 go() 事件处理程序的最后一行,箭头将移动并留下尾随行。