【问题标题】:Can you turn off tracer for TurtleScreen embedded in tkinter window?您可以关闭嵌入在 tkinter 窗口中的 TurtleScreen 的跟踪器吗?
【发布时间】:2022-01-15 13:38:40
【问题描述】:

我有一个功能齐全的海龟游戏。我将它移到了 tkinter 窗口,它的工作方式与以前类似,但 screen.tracer(0) 似乎没有做任何事情(这意味着它不会按预期停止屏幕更新)。此外,screen.addshape("shape") 似乎也不起作用,如果有人对此有所了解。我想知道当屏幕嵌入到 tkinter 画布中时,这两种方法是否实际上都不起作用。其余的方法,例如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()

【问题讨论】:

  • 这能回答你的问题吗? What does turtle.tracer() do?
  • 您的问题有一个重复,并且很好地解释了turtle.tracer 它的论点、推荐用途、怪癖和python 3 陷阱herepenuppendown 按预期工作。
  • @ReblochonMasque 不幸的是,没有。这很好地解释了 turtle.tracer(0) 所做的事情,将更新设置为 False,但它没有解释为什么 tkinter 会影响这一点。在上面的例子中,screen.tracer(0) 应该是这样,所以在调用screen.update() 之前屏幕不会更新。但它会继续更新。

标签: tkinter canvas turtle-graphics python-turtle


【解决方案1】:

问题是您使用Canvas 而不是TurtleScreen 初始化了RawTurtle()。如果我们改为使用turtle = RawTurtle(screen),一切都与独立海龟一样工作:

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

【讨论】:

  • 非常感谢!这解决了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 2018-04-25
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
相关资源
最近更新 更多