如何定义Turtle绘图函数:调用时清屏或按键关闭窗口
问题需求
我希望定义一个使用turtle绘图库绘制图形的函数,要求再次调用该函数时能够清除turtle绘图窗口。请问是否有实现该功能的方法,或者能否在绘图完成后按下特定按键关闭turtle窗口?
原函数代码
import turtle import math def draw(b, d, w, h): bDraw = b*10 dDraw = d*10 wDraw = w*10 hDraw = h*10 bdAngle = abs(math.atan(dDraw/bDraw)*180/math.pi) draw = turtle.Turtle() draw.right(90) draw.forward(hDraw) draw.left(90) draw.forward(wDraw) draw.left(90) draw.forward(hDraw) draw.right(90) draw.forward(bDraw) draw.left(180-bdAngle) draw.forward(math.sqrt(dDraw**2 + bDraw**2)) draw.left(bdAngle) draw.forward(wDraw) draw.left(90-(180-bdAngle-90)) draw.forward(math.sqrt(dDraw**2 + bDraw**2)) draw.left(180-bdAngle) draw.forward(bDraw+wDraw)
解决方案
1. 再次调用函数时清除绘图窗口
有两种实用方式实现该需求:
turtle.clear():仅清除画布上的所有图形,保留画笔当前的位置和状态turtle.reset():清除画布同时将画笔重置到初始位置、角度等默认状态
建议在函数开头加入清除逻辑,同时避免每次调用都新建Turtle实例(减少资源消耗),修改后的函数示例:
import turtle import math # 全局创建单个画笔实例,避免重复初始化 pen = turtle.Turtle() def draw(b, d, w, h): # 重置画布与画笔状态 pen.reset() bDraw = b*10 dDraw = d*10 wDraw = w*10 hDraw = h*10 bdAngle = abs(math.atan(dDraw/bDraw)*180/math.pi) pen.right(90) pen.forward(hDraw) pen.left(90) pen.forward(wDraw) pen.left(90) pen.forward(hDraw) pen.right(90) pen.forward(bDraw) pen.left(180-bdAngle) pen.forward(math.sqrt(dDraw**2 + bDraw**2)) pen.left(bdAngle) pen.forward(wDraw) pen.left(90-(180-bdAngle-90)) pen.forward(math.sqrt(dDraw**2 + bDraw**2)) pen.left(180-bdAngle) pen.forward(bDraw+wDraw)
2. 按下特定按键关闭窗口
可以通过turtle.onkey()绑定按键事件,配合turtle.listen()监听键盘输入,示例如下:
# 定义关闭窗口的函数 def close_window(): turtle.bye() # 绑定按键,例如按下q键关闭窗口 turtle.onkey(close_window, 'q') # 开启键盘监听 turtle.listen() # 保持窗口运行,直到手动关闭或触发按键事件 turtle.done()
你可以把按键关闭的逻辑整合到绘图流程中,比如绘图完成后在控制台提示用户按指定按键关闭窗口。
内容的提问来源于stack exchange,提问作者Joshua Ayitevie
相关产品推荐
相关产品推荐

