Turtle Graphics Not Responding
I am creating diagrams with the turtle package in Python, and it is successful to some extent, except for one problem. Once turtle generates the diagram that I have in code, it causes the program t开发者_JS百科o say "Not responding" and eventually I have to end the task. I am using Windows 7.
Have any of you experienced this or know the root cause? I tried reinstalling Python completely, but that didn't seem to affect the problem.
Here is some example code that will make it fail to respond:
import turtle
from turtle import forward, right, left
forward(50)
I had the same problem (I was on Win 7 as well, and I then got the same problem on Win XP), and I just figured it out.
You have to say turtle.done()
when you're done.
Now that I know this, it makes more sense, because since Python doesn't know that the turtle is done, it's probably waiting for another command for the turtle.
Here's the documentation (in Python 2.7) of what library I assume you're using. It's how I figured that out. It says Python 2.7 but this also works for Python 2.5.
http://docs.python.org/library/turtle.html
Hope that helps (for you or anyone else reading this),
Alex
Just add a call to exitonclick at the end. The Turtle class is implemented using Tkinter and exitonclick()
invokes mainloop()
which will keep the turtle window open until you click anywhere in the canvas. So, a simple program looks like this:
from turtle import *
#make a square
for _ in range(4):
forward(100)
left(90)
exitonclick()
Enjoy!
I'm using python 3.6.0 and ran into the same issue. The turtle.done()
after your code block prevents the turtle graphic window from becoming unresponsive.
import turtle
for _ in range(5):
turtle.forward(100)
turtle.right(360/5)
turtle.done() # <------------
Add a mainloop()
or exitonclick()
or done()
or something that shows python that you want to exit the turtle window
It has some problem with IDLE. It will work if run from python command line
I thought the trick to closing the turtle program was to rename the 'turtle' module and store it as a new object, then call the .done() method, or .exitonclick() method, for example:
from turtle import *
import turtle
#make a square
for i in range(4):
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.done()
Or alternatively, something like:
from turtle import *
import turtle as t
#draw a right angle
for i in range(4):
t.forward(100)
t.left(90)
t.forward(100)
t.exitonclick()
Simply importing the 'turtle' module on its own will not work. Use the 'from turtle import *' wildcard. Then you'll be able to use the call functions such as forward(), or left() without having to use any prefix or 'object_name.forward()' for example. So long as you finish the code with a simple done() or exitonclick() command, it works:
from turtle import *
forward(100)
shape('turtle')
right(90)
forward(100)
right(90)
forward(100)
right(90)
forward(100)
done()
I tested lots of things for this problem myself as I faced same problem.
So what I found after searching many resources was this:
NB. This problem happens for windows users when the click on the turtle graphic window.
First, I found spyder environment very useful
Second, this line works just fine:
Turtle.bye()
this would end the execution without any need of clicking.
Of course anyone needs to see what is happening on the window, so I suggest adding this:
import time
import turtle
<your code on turtle>
time.sleep(5)
Turtle.bye()
remember to write Turtle with capital t.
add the following line at the end of your code :
wait_for_user()
That should solve your problem!
I tried the code in my IDLE and it worked perfectly. Do you have an old/slower machine? Although I don't think that's the problem. Try adding a line at the end:
exitonclick()
Its probably just as turtle seem a bit temperamental. Also, If you have found an answer that helped or solved your problem, be sure to upvote and accept the answer (the arrow icon near the question), as the question otherwise displays as unsolved and you will continue getting answers.
-Harry
I've come across your problem ever,and then I try to create a shortcut for IDLE as follow(not forget the " -n"):
target:D:\Python27\Lib\idlelib\idle.pyw -n
And launch the IDLE by the shortcut,type yr code and enjoy!FYI.
There might be many reasons for it :- 1.You might have a python file named turtle(if you have one rename it) 2.try by using t.done() at the end of your code
when using turtle.done(), the first time will work, but the second time not.
to solve this:
turtle.done()
try:
turtle.bye()
except turtle.Terminator:
pass
from here Problems with running turtle programs in Spyder
精彩评论