Python Turtle画图窗口不显示?原因及解决办法
2025-03-22 06:17:34
Python Turtle 画图:窗口不显示的解决办法
最近有些刚学 Python 的朋友,在使用 Turtle 库画图的时候遇到一个问题:代码运行完了,但是画图的窗口没弹出来。就像下面这段代码:
import turtle #acutally called turtle to draw a turtle beautiful also used
to draw other stuff
# to draw a square or eventually a turtle you need to do this things below
# to draw a square you want to : move forward,turn right,move forward,turn
right,move forward turn right
def draw_square(): #draw square for turtles
window = turtle.Screen() #this is the background where the turtle will
move
window.bgcolor("red") # the color of the screen
brad = turtle.Turtle() #this is how to start drawing like time.sleep you use turtle.Turtle
brad.forward(100)#move turtle forward takes in a number which is the distance to move forward
brad.forward(90)# moves right
brad.forward(100)
brad.forward(90)
brad.forward(100)
brad.forward(90)
brad.forward(100)
brad.forward(90)
window.exitonclick() #click the screen to close it
draw_square()
明明代码看起来没问题,也没报错,但就是看不到窗口。别急,接下来咱们就一起看看这是咋回事,以及怎么解决。
一、问题分析:代码执行太快了!
最可能的原因就是:程序跑得太快,画完就自动关了,你还没来得及看清,它就结束了。 你可以把程序想象成一个画图的小人,它得按照你的指示一步步来。turtle.Screen()
创建了画布, turtle.Turtle()
叫出了画图小人 brad
。 但是你写了八次 brad.forward(..)
相当于让这个小人, 动了八次,虽然改变了位置,但并没有转向。并且, 在调用draw_square()
的时候,window.exitonclick()
直接就属于调用状态,实际上可能执行的时候在绘图命令之前,导致窗口创建完,遇到这一句,直接可以退出了。
二、 解决方案
既然是程序跑太快导致的问题, 那就有很多简单方法让窗口留着。
1. 调整window.exitonclick()
位置:
这是最简单,也是推荐的解决办法。 把 window.exitonclick()
这行代码放到 draw_square()
函数定义的最后面, 让它在所有绘图操作完成后再执行。
-
原理:
window.exitonclick()
的作用是让窗口保持打开状态,直到你点击窗口才关闭。 原来的代码写的不太对, 导致提前退出了。放到绘图结束后面,就能保证窗口在绘图完成后才等待关闭。 -
代码示例:
import turtle def draw_square(): window = turtle.Screen() window.bgcolor("red") brad = turtle.Turtle() brad.forward(100) brad.right(90) # 转向! brad.forward(100) brad.right(90) brad.forward(100) brad.right(90) brad.forward(100) brad.right(90) window.exitonclick() draw_square()
2. 使用 turtle.done()
:
turtle.done()
也可以让程序保持运行,直到手动关闭窗口。
-
原理:
turtle.done()
会让 Turtle 图形窗口保持打开状态,直到用户手动关闭它。 它实际上是turtle.mainloop()
的别名,作用是进入 Turtle 的主事件循环。 -
代码示例:
import turtle def draw_square(): window = turtle.Screen() window.bgcolor("red") brad = turtle.Turtle() brad.forward(100) brad.right(90) brad.forward(100) brad.right(90) brad.forward(100) brad.right(90) brad.forward(100) brad.right(90) draw_square() turtle.done() # 或者 turtle.mainloop()
3. 循环绘制(解决根本问题):
既然要画一个正方形,我们发现绘制过程实际上重复了多次相同操作。把重复的工作交给循环。
* 原理 :通过循环,减少重复代码,提高效率。循环4次,每次都前进,然后右转。
* 代码 :
```python
import turtle
def draw_square():
window = turtle.Screen()
window.bgcolor("red")
brad = turtle.Turtle()
for _ in range(4): # 循环四次画一个正方形
brad.forward(100)
brad.right(90)
window.exitonclick()
draw_square()
```
4. 添加延迟(不推荐,仅作演示):
你可以在代码最后加上 time.sleep()
来让程序暂停一段时间。
-
原理:
time.sleep(seconds)
可以让程序暂停指定的秒数。比如time.sleep(5)
就是暂停 5 秒。 -
代码示例:
import turtle import time # 需要导入 time 模块 def draw_square(): window = turtle.Screen() window.bgcolor("red") brad = turtle.Turtle() for _ in range(4): brad.forward(100) brad.right(90) draw_square() time.sleep(5) # 程序暂停 5 秒
注意: 这种方法只是让程序暂停,窗口还是会一闪而过,然后停在那里。不太优雅,而且在暂停期间程序无法响应其他操作,一般只用于简单调试。
三. 进阶技巧:画笔的更多设置
turtle
画图有很多设置,我们这里可以稍微设置一下,增加效果。
brad.speed()
可以控制画图速度,用数字表示速度。brad.color()
改变画笔颜色,括号里可以使用颜色的英文单词,或者使用RGB颜色。brad.shape()
可以改变画笔的形状,默认为"arrow",还有"turtle", "circle", "square", "triangle", "classic" 可以使用。- 使用
brad.pensize()
修改画笔粗细。
举个例子:
import turtle
def draw_square():
window = turtle.Screen()
window.bgcolor("lightgreen") #换个背景颜色
brad = turtle.Turtle()
brad.shape("turtle") #把画笔变成小海龟
brad.color("blue") # 画笔变蓝色
brad.speed(2) # 速度调慢一点,别太快
brad.pensize(3) # 画笔粗一点
for _ in range(4):
brad.forward(100)
brad.right(90)
window.exitonclick()
draw_square()
我们用了一些属性,调整了一些小细节,是不是就丰富多了。
四、画其他图形和有趣的操作
有了画正方形的基础,画其他图形也很简单。比如:
-
画圆:
brad.circle(radius)
,radius
是半径。 -
画三角形: 通过控制角度,例如等边三角形, 每次都左转120度, 循环三次:
for _ in range(3): brad.forward(100) brad.left(120)
-
画多个图形: 通过在不同位置画多个图形。
import turtle window = turtle.Screen() window.bgcolor("lightgreen") # 画第一个正方形 square1 = turtle.Turtle() square1.color("blue") for _ in range(4): square1.forward(100) square1.right(90) # 画第二个正方形, 移动到新位置 square2 = turtle.Turtle() square2.color("red") square2.penup() # 抬笔,移动时不画线 square2.goto(50, 50) # 移动到坐标 (50, 50) square2.pendown() # 落笔,开始画 for _ in range(4): square2.forward(50) square2.right(90) window.exitonclick()
利用这些技巧,就能玩出很多花样。
用 Turtle 库画图是不是挺有意思?遇到窗口不显示的问题,记得看看是不是程序跑太快了,或者window.exitonclick()
方法的位置和调用写错了。只要稍微调整一下,就能顺利看到你的画作啦!