【问题标题】:How to speed up the turtle while in a tkinter canvas如何在 tkinter 画布中加速海龟
【发布时间】:2020-05-11 03:19:04
【问题描述】:

我试图让乌龟移动得更快,我通常会这样做

import turtle as t

t.speed(0)
t.tracer(0,0)

但是当我使用 RawTurtle() 将它放在画布中时,我不知道该怎么做。

root = tk.Tk() #create root window

#create turtle canvas
canvas = tk.Canvas(root,width=500,height=500)
canvas.pack()
t = turtle.RawTurtle(canvas)
t.ht()

这是我的代码。有人知道怎么做吗?

【问题讨论】:

  • 试试t.speed(0)t.getscreen().tracer(0, 0)
  • 我已经尝试过t.speed(0)t.tracer(0,0),但没有成功。当我使用t.getscreen().tracer(0,0) 时,程序会崩溃。
  • 我没有这个问题。你是在t = turtle.RawTurtle(canvas)之后调用的吗?
  • 是的,我做到了。我刚才又试了一下,没有错误,也没有崩溃,但是当我执行t.forward(100)或任何其他乌龟命令时,它不动。
  • 由于您禁用了tracer,您需要调用t.getscreen().update()刷新屏幕。

标签: python tkinter python-turtle


【解决方案1】:

首先,要么做一个,要么做另一个,而不是两个:

t.speed(0)
t.tracer(0,0)

speed(0) 又名speed('fastest') 为您提供最快的绘图动画。 tracer(0) 完全消除了绘图动画。它们不会加在一起。

您可以通过使用海龟的 TurtleScreen() 包装器在 Canvas嵌入海龟中获得最大速度,即消除绘图动画:

import tkinter as tk
from turtle import TurtleScreen, RawTurtle

root = tk.Tk()
canvas = tk.Canvas(root, width=500, height=500)
canvas.pack()

screen = TurtleScreen(canvas)
screen.tracer(False)

turtle = RawTurtle(screen)

turtle.circle(100)

screen.tracer(True)
screen.mainloop()

【讨论】:

    【解决方案2】:

    我对您的代码做了一些修改。对于初学者,您需要处理t = turtle.RawTurtle(canvas) 行之后的所有命令。然后你需要在最后添加一个.mainloop() 函数。

    这将是您的最终代码:

    import tkinter as tk
    root = tk.Tk() #create root window
    import turtle
    #create turtle canvas
    canvas = tk.Canvas(root,width=500,height=500)
    canvas.pack()
    t = turtle.RawTurtle(canvas)
    t.speed(1)
    t.forward(100)
    t.ht()
    root.mainloop()
    

    当速度设置为 1 时,输出如下:

    当速度设置为 0 时,这是输出:

    对 GIF 感到抱歉,希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2018-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      • 2023-03-16
      相关资源
      最近更新 更多