Python 把乌龟的窗户藏起来?
我正在用Turtle生成图表,作为我程序的一部分,我从图表中识别某些坐标。我希望能够隐藏整个海龟窗口,因为我只关心坐标,这是可能的吗 编辑: 问题2: 这不是一个真正的答案,而是几个其他的问题 我让我的程序在某种程度上工作,如果你在空闲状态下运行它并键入“l”,它会给你坐标列表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
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())