2011-08-29 6 views
3

나는 거북이에서 다이어그램을 생성하고 있으며, 프로그램의 일부로 다이어그램에서 특정 좌표를 식별합니다. 나는 단지 좌표에 관심이 있기 때문에 완전한 거북 창을 숨길 수 있기를 바랄 수 있습니까?터틀 창 숨기기?

편집 :

질문 2 :

이 정말 답이 아니라 다른 몇 가지 질문입니다.

IDLE에서 실행하고 "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과 비슷한 패키지가 있지만 더 빨리 명령을 수행 할 수 있습니까?

답변

4

나는 thirtyseven이 제안한 거북이 클래스를 다시 구현했습니다. 그것은 api와 일치합니다. 이 클래스에서 우회전 할 때 (즉,)가. 이것은 API의 모든 메소드 만 일반적인 것들을 구현하지 않습니다

. turtle에서 우회전과 동일하다 (그리고 그 사람은 당신이 사용된다.

그러나 앞으로의 모든 포인트를 추적 할 수 있으며, forward, backward 또는 setpos (또는 any)를 호출 할 때마다 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

캔버스까지 모두 숨길 수 있습니까? ould는 모든 창문을 좋아하지 않습니다. – ElectroNerd

+0

답변을 정정했습니다. – thirtyseven

+0

이것은 하나의 가능성입니다. 고맙습니다. – ElectroNerd

관련 문제