Черепаха графика - Как я могу контролировать, когда окно закрывается? - PullRequest
27 голосов
/ 04 июня 2011

У меня есть небольшой скрипт на python, который рисует графику черепахи. Когда мой скрипт завершил работу, экран черепахи автоматически закрывается, поэтому, чтобы на некоторое время увидеть графику, я должен использовать time.sleep(5) в конце скрипта, чтобы отложить закрытие.

Есть ли способ, как я могу сделать это более динамичным, то есть сказать python, что я хочу сам контролировать закрытие окна? Я не возражаю, если скрипт не может сделать что-либо еще в ожидании моей команды, но я бы предпочел, чтобы мне не приходилось идти на консоль для read() или чего-то еще. В идеале холст должен оставаться открытым даже после завершения работы скрипта, но я согласен с решением, которое останавливает скрипт до тех пор, пока я не закрою окно с холстом (или не щелкну холст, или что-то еще ...).

Как мне это сделать?

Ответы [ 5 ]

46 голосов
/ 14 июня 2012

просто используйте done() или exitonclick() в качестве последней команды вашей программы черепахи.

19 голосов
/ 05 июня 2011
import turtle

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

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

(редактировать: turtle.done(), как предлагает Хуа, менее уродливо.)

8 голосов
/ 26 апреля 2012

просто используйте функцию mainloop (), импортированную из самого модуля turtle!.

import turtle


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


#calling for the mainloop()
turtle.mainloop()
1 голос
/ 23 января 2012

Попробуйте добавить input() в конце кода.

0 голосов
/ 01 июня 2014

Это ожидает нескольких щелчков - и рисует спираль, пока вы нажимаете - пока не решит выйти при последнем щелчке:

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()
...