你能关闭 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()
事件处理程序的最后一行,箭头将移动并留下尾随行。
我在 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()
事件处理程序的最后一行,箭头将移动并留下尾随行。