Python 把乌龟的窗户藏起来?

Python 把乌龟的窗户藏起来?,python,turtle-graphics,Python,Turtle Graphics,我正在用Turtle生成图表,作为我程序的一部分,我从图表中识别某些坐标。我希望能够隐藏整个海龟窗口,因为我只关心坐标,这是可能的吗 编辑: 问题2: 这不是一个真正的答案,而是几个其他的问题 我让我的程序在某种程度上工作,如果你在空闲状态下运行它并键入“l”,它会给你坐标列表 import Tkinter import turtle from turtle import rt, lt, fd # Right, Left, Forward size = 10 root = Tkinte

我正在用Turtle生成图表,作为我程序的一部分,我从图表中识别某些坐标。我希望能够隐藏整个海龟窗口,因为我只关心坐标,这是可能的吗

编辑:

问题2:

这不是一个真正的答案,而是几个其他的问题

我让我的程序在某种程度上工作,如果你在空闲状态下运行它并键入“l”,它会给你坐标列表

import Tkinter
import turtle

from turtle import rt, lt, fd   # Right, Left, Forward

size = 10

root = Tkinter.Tk()
root.withdraw()

c = Tkinter.Canvas(master = root)
t = turtle.RawTurtle(c)

t.speed("Fastest")

# List entire coordinates
l = []

def findAndStoreCoords():
    x = t.xcor()
    y = t.ycor()

    x = round(x, 0)     # Round x to the nearest integer
    y = round(y, 0)     # Round y to the nearest integer

    # Integrate coordinates into sub-list
    l.append([x, y])

def hilbert(level, angle):
    if level == 0:
        return

    t.rt(angle)
    hilbert(level - 1, -angle)
    t.fd(size)
    findAndStoreCoords()
    t.lt(angle)
    hilbert(level - 1, angle)
    t.fd(size)
    findAndStoreCoords()
    hilbert(level - 1, angle)
    t.lt(angle)
    t.fd(size)
    findAndStoreCoords()
    hilbert(level - 1, -angle)
    t.rt(angle)

问题是乌龟太慢了!有没有像Turtle一样的软件包可以更快地执行命令?

是的,这是可能的。最简单的方法是实例化根Tkinter窗口,将其撤回,然后将其用作RawTurtle画布实例的主窗口

例如:

import Tkinter
import turtle

root=Tkinter.Tk()
root.withdraw()
c=Tkinter.Canvas(master=root)
t=turtle.RawTurtle(c)
t.fd(5)
print t.xcor() # outputs 5.0

不幸的是,这仍然会启动图形系统,但不会出现窗口。

我按照三十七的建议重新实现了turtle类。它与api一致。(也就是说,在这节课上右转与在
海龟
中右转相同

这并没有实现api中的所有方法,只有常用的(以及您使用的)方法

但是,它很短,扩展起来也很简单。此外,它还跟踪它所访问的所有点。它通过在每次调用forward、backward或setpos(或这些函数的任何别名)时向pointsVisited添加一个条目来实现这一点

问题是乌龟跑得太慢了!有没有什么包裹是空的 就像乌龟一样,但能更快地执行命令吗

是的,turtle可以。如果我们在tkinter实现中添加一个
TurtleScreen
,并使用它的
tracer()
功能,我们可以比turtle的
speed()
方法加快速度。我们可以通过抛开定制大大简化代码,只需使用turtle自己的
begin\u poly()
end\u poly()
获取poly()
方法:

from tkinter import Tk, Canvas
from turtle import TurtleScreen, RawTurtle

SIZE = 10

def hilbert(level, angle):
    if level == 0:
        return

    turtle.right(angle)
    hilbert(level - 1, -angle)
    turtle.forward(SIZE)
    turtle.left(angle)
    hilbert(level - 1, angle)
    turtle.forward(SIZE)
    hilbert(level - 1, angle)
    turtle.left(angle)
    turtle.forward(SIZE)
    hilbert(level - 1, -angle)
    turtle.right(angle)

root = Tk()
root.withdraw()

canvas = Canvas(master=root)
screen = TurtleScreen(canvas)
screen.tracer(False)  # turn off turtle animation

turtle = RawTurtle(screen)
turtle.begin_poly()  # start tracking movements

hilbert(5, 90)

turtle.end_poly()  # end tracking movements

print(turtle.get_poly())

在我的系统上,这将在大约1/3秒的时间内打印出5级希尔伯特曲线中的所有点。您发布的代码将花费将近9秒的时间来输出4级。

不可能隐藏所有内容,即使是画布?我希望没有任何窗口可以显示全部。我很感激这是一种可能性。更完整的解决方案将涉及到分叉tpython源代码中的urtle.py,并重新实现TurtleScreenBase,这样就不会调用Tk了。老实说,我是python新手,你会怎么做?
from tkinter import Tk, Canvas
from turtle import TurtleScreen, RawTurtle

SIZE = 10

def hilbert(level, angle):
    if level == 0:
        return

    turtle.right(angle)
    hilbert(level - 1, -angle)
    turtle.forward(SIZE)
    turtle.left(angle)
    hilbert(level - 1, angle)
    turtle.forward(SIZE)
    hilbert(level - 1, angle)
    turtle.left(angle)
    turtle.forward(SIZE)
    hilbert(level - 1, -angle)
    turtle.right(angle)

root = Tk()
root.withdraw()

canvas = Canvas(master=root)
screen = TurtleScreen(canvas)
screen.tracer(False)  # turn off turtle animation

turtle = RawTurtle(screen)
turtle.begin_poly()  # start tracking movements

hilbert(5, 90)

turtle.end_poly()  # end tracking movements

print(turtle.get_poly())