海龟图形 - 我如何控制窗口何时关闭?

48
我有一个小的Python脚本,用于绘制一些乌龟图形。当我的脚本运行完毕时,乌龟屏幕会自动关闭,所以为了能够看到图形一段时间,我必须在脚本的末尾使用time.sleep(5)来延迟关闭。
有没有办法让这个过程更加灵活,即告诉Python我想自己控制窗口的关闭?我不介意脚本在等待我的命令时不能做其他事情,但我希望不必去控制台输入read()之类的命令。理想情况下,画布应该在脚本运行结束后仍然保持打开状态,但如果能够在关闭包含画布的窗口之前暂停脚本,我也可以接受。
我该如何实现这个目标?

python -i script.py 可以在终端中运行。 - Squirrl
1
这个问题和答案同样适用于在PyCharm中编写的海龟程序! - rubpa
5个回答

96

3
在Python 3中,import turtle; turtle.exitonclick()应该足够了。 - ggorlen
虽然有链接,但最好也加上一些解释。 - Hossein Ebrahimi
turtle.done()turtle.Screen().exitonclick() 之间有什么区别? - Stevoisiak
@Stevoisiak exitonclick在点击后会自动退出,但done不会。 - undefined

26
import turtle

turtle.forward(100)
turtle.left(90)
turtle.forward(100)
# etc.

turtle.getscreen()._root.mainloop()  # <-- run the Tkinter main loop

(编辑:如下所建议的,turtle.done() 会更简洁。)


太好了!脚本会一直停留,直到我关闭窗口,然后才会继续执行。 - Tomas Aschan
3
你需要使用getscreen()._root这部分吗?turtle.mainloop()在Python 3中可以很好地工作。 - palsch

11

只需使用从turtle模块本身导入的mainloop()函数即可!

import turtle


#Draw a square
for i in range(4):
    turtle.forward(200)
    turtle.left(90)


#calling for the mainloop()
turtle.mainloop()

3
PAG的答案看起来可以正常工作。AttributeError: 'Turtle' object has no attribute 'mainloop' 翻译为:属性错误:‘Turtle’对象没有‘mainloop’属性。 - Don Kirkby
2
@DonKirkby 它是 turtle.mainloop() 而不是 Turtle.mainloop()。 - DevX
2
你是对的,@DevX,不确定我怎么会搞错了。这个答案现在对我有用。 - Don Kirkby

3
尝试在代码结尾处添加input()

0

这个程序会等待多次点击 - 每次点击时都会绘制一个螺旋形 - 直到最后一次点击决定退出:

import turtle


win = turtle.Screen()
win.bgcolor("white")

tess = turtle.Turtle()

tess.speed(0)
tess.color("blue")             
tess.pensize(5)                 
offSet=30

def doNextEvent(x,y):

    global offSet
    global win
    tess.forward(20)
    tess.left(1+offSet)
    offSet=offSet-2
    if(offSet<1):
        win.exitonclick()


win.onclick(doNextEvent)
win.listen()
win.mainloop()

不是的:AttributeError: '_Screen'对象没有'mainloop'属性 - SiHa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接