Python Turtle Graphics在Anaconda Spyder中运行无响应问题排查
Troubleshooting Your Unresponsive Turtle Code in Spyder
Hey there, let's break down why your Python Turtle script is freezing up in Spyder and fix it step by step!
Key Issues Causing the Freeze
input()blocks the Turtle event loop: Turtle runs on a single-threaded event loop, and usinginput()mid-drawing stops the entire GUI from updating. This is extra noticeable in Spyder because its console integration interacts differently with the Turtle window.- Duplicate event loop calls: You have both
turtle.mainloop()inmain()andturtle.done()inmake_square()— these functions do essentially the same thing, and calling both creates a conflict that hangs the program. - Minor logic glitch in input validation: Your while loop for checking the number of sides has a flow issue that could lead to unexpected behavior.
Fixed Code
Here's the revised version with clear improvements:
import turtle def main(): window = turtle.Screen() luis = turtle.Turtle() # Get all inputs FIRST to avoid blocking the GUI length = get_valid_length() side_count = get_valid_side_count() draw_polygon(luis, length, side_count) turtle.mainloop() def get_valid_length(): # Helper to get a positive integer length while True: try: length = int(input('Insert length: ')) if length > 0: return length else: print('Length must be a positive number!') except ValueError: print('Please enter a valid integer for length.') def get_valid_side_count(): # Helper to get a valid side count (>=3) while True: try: side_count = int(input('Insert number of sides of your figure: ')) if side_count >= 3: return side_count else: print('The minimum number of sides is 3') except ValueError: print('Please enter a valid integer for the number of sides.') def draw_polygon(turtle_obj, length, side_count): angle = 360 / side_count for _ in range(side_count): turtle_obj.forward(length) turtle_obj.left(angle) # Removed turtle.done() here — only mainloop() is needed in main() if __name__ == '__main__': main()
What Changed?
- Moved input logic to helpers: By collecting all user inputs before launching the Turtle drawing, we avoid blocking the GUI event loop with
input()calls while the window is open. - Added error handling: Now the program won't crash if the user enters non-integer values — it'll prompt them to try again.
- Removed duplicate event loop call: Only
turtle.mainloop()stays inmain()to keep the window open after drawing, eliminating conflicts. - Cleaned up validation logic: The while loops in helper functions ensure we get valid values before proceeding, making the code more robust.
Extra Spyder Tips
- Run the script in Spyder's external system terminal (set via
Run > Configuration per file > Execute in an external system terminal). This fixes most interactive input and Turtle window quirks. - Close all existing Turtle windows before re-running the script to avoid leftover background processes.
内容的提问来源于stack exchange,提问作者NILS ERICSON SÁNCHEZ HUAYANA
相关产品推荐
相关产品推荐

