Python中turtle函数二次执行报turtle.Terminator错误原因咨询
问题原因及解决方案
错误原因
第一次执行printmaze函数时,末尾的screen.exitonclick()会关闭turtle图形窗口并终止turtle主循环,同时释放turtle相关的底层系统资源。第二次调用函数时,尝试执行turtle.clear()等turtle操作时,由于图形环境已被销毁,无法访问turtle资源,因此抛出turtle.Terminator错误。
修复方案
方案1:将窗口控制逻辑移到函数外部
不在函数内部调用exitonclick(),而是在函数调用后统一处理窗口退出,实现同一个窗口的复用:
import turtle def printmaze(sizeX, sizeY, walls): startX = -300 startY = 300 high = (-startX // sizeX) * 2 width = (startY // sizeY) * 2 turtle.clear() turtle.speed(0) turtle.penup() turtle.goto(-startX, startY) turtle.pendown() turtle.goto(-startX, -startY) turtle.goto(startX, -startY) turtle.setheading(0) for i in range(sizeX): turtle.penup() turtle.goto(startX, startY - high * i) for l in range(sizeY): if walls[i][l][1] == 1: turtle.pendown() else: turtle.penup() turtle.forward(width) turtle.right(90) for i in range(sizeY): turtle.penup() turtle.goto(startX + width * i, startY) for l in range(sizeX): if walls[l][i][0] == 1: turtle.pendown() else: turtle.penup() turtle.forward(high) # 外部创建窗口并控制退出 screen = turtle.Screen() # 第一次调用 printmaze(10, 10, [[[0,1] for _ in range(10)] for _ in range(10)]) # 第二次调用 printmaze(5,5, [[[1,0] for _ in range(5)] for _ in range(5)]) screen.exitonclick()
方案2:使用面向对象方式,每次创建独立实例
如果需要每次调用函数生成新窗口,可创建专属的Screen和Turtle对象,避免依赖全局turtle实例:
import turtle def printmaze(sizeX, sizeY, walls): startX = -300 startY = 300 high = (-startX // sizeX) * 2 width = (startY // sizeY) * 2 # 创建新的窗口和画笔实例 screen = turtle.Screen() pen = turtle.Turtle() pen.speed(0) pen.penup() pen.goto(-startX, startY) pen.pendown() pen.goto(-startX, -startY) pen.goto(startX, -startY) pen.setheading(0) for i in range(sizeX): pen.penup() pen.goto(startX, startY - high * i) for l in range(sizeY): if walls[i][l][1] == 1: pen.pendown() else: pen.penup() pen.forward(width) pen.right(90) for i in range(sizeY): pen.penup() pen.goto(startX + width * i, startY) for l in range(sizeX): if walls[l][i][0] == 1: pen.pendown() else: pen.penup() pen.forward(high) screen.exitonclick() # 关闭窗口后主动释放资源 turtle.bye()
此方案每次调用都会生成新窗口,不会因之前窗口关闭导致资源访问问题。
内容的提问来源于stack exchange,提问作者Loger
相关产品推荐
相关产品推荐

