2011-08-29 117 views
3

我生成的龟图,并作为我的计划的一部分,我确定从我的图表某些坐标。我希望能够隐藏完整的乌龟窗口,因为我只关心坐标,可能吗?隐藏龟窗口?

编辑:

问题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) 

问题是,龟是如此的慢!有没有像龟一样的包,但可以更快地执行命令?

回答

4

我重新实现乌龟类由37岁的建议。它与api一致。 (即当你们在课堂上向右转,则是相同turtle右转。

这不实现在API中的所有方法,只有常见的。(你所使用的那些)。

然而,这是短,和相当简单的扩展。此外,它跟踪所有它已给分的。它通过每次调用向前,向后,或setpos一次添加一个条目,以pointsVisited做到这一点(或任何这些功能的别名)

import math 

class UndrawnTurtle(): 
    def __init__(self): 
     self.x, self.y, self.angle = 0.0, 0.0, 0.0 
     self.pointsVisited = [] 
     self._visit() 

    def position(self): 
     return self.x, self.y 

    def xcor(self): 
     return self.x 

    def ycor(self): 
     return self.y 

    def forward(self, distance): 
     angle_radians = math.radians(self.angle) 

     self.x += math.cos(angle_radians) * distance 
     self.y += math.sin(angle_radians) * distance 

     self._visit() 

    def backward(self, distance): 
     self.forward(-distance) 

    def right(self, angle): 
     self.angle -= angle 

    def left(self, angle): 
     self.angle += angle 

    def setpos(self, x, y = None): 
     """Can be passed either a tuple or two numbers.""" 
     if y == None: 
      self.x = x[0] 
      self.y = y[1] 
     else: 
      self.x = x 
      self.y = y 
     self._visit() 

    def _visit(self): 
     """Add point to the list of points gone to by the turtle.""" 
     self.pointsVisited.append(self.position()) 

    # Now for some aliases. Everything that's implemented in this class 
    # should be aliased the same way as the actual api. 
    fd = forward 
    bk = backward 
    back = backward 
    rt = right 
    lt = left 
    setposition = setpos 
    goto = setpos 
    pos = position 

ut = UndrawnTurtle() 
+0

+1。谢谢,这工作完美。 – ElectroNerd

1

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

例子:

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 

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

+0

这是不可能隐藏一切,甚至画布?我w应该喜欢没有窗户来一个全部。 – ElectroNerd

+0

我纠正了我的答案。 – thirtyseven

+0

这是一种可能性,我很感激。 – ElectroNerd