tkinter中使用turtle绘制正多边形出现窗口弹出、报错、光标不停止问题
问题修复方案
核心问题根因
- 绘图对象调用错误:创建了绑定Canvas的
RawTurtle实例re_po,但后续绘图调用了全局turtle对象,全局对象默认生成独立turtle窗口 - 死循环逻辑错误:循环判断条件为
n!=0,但循环体内将n赋值为1,导致循环永远不会终止,光标持续移动 - 方法误用:嵌入场景调用了仅独立turtle窗口适用的
turtle.done(),阻塞tkinter事件循环,导致Canvas对象被销毁后仍然执行绘图命令,触发TclError和Terminator报错
修复后完整代码
from tkinter import * import turtle # 导入放到全局,不要放在函数内重复导入 root = Tk() root.title("도형 그리기") def buttonclick3(): # 清空画布上次绘制的内容 cv.delete("all") # 创建绑定到tkinter Canvas的turtle实例 re_po = turtle.RawTurtle(cv) # 隐藏绘制完成后的光标,可按需删除 re_po.hideturtle() n = int(ent_N.get()) angle = 360 / n side = 100 # 修复循环逻辑,绘制n次后终止 for _ in range(n): re_po.forward(side) re_po.left(angle) lb5 = Label(root, text="3.정N각형 그리기") lb6 = Label(root, text="N을 입력하세요.") ent_N = Entry(root, width=70) bt3 = Button(root, text="정다각형 그리기", command=buttonclick3) cv = Canvas(root, width=700, height=700, bg="white") lb5.grid(row=8, column=0) lb6.grid(row=9, column=0, columnspan=3) ent_N.grid(row=10, column=0, columnspan=3) bt3.grid(row=11, column=0, columnspan=3) cv.grid(row=12, column=0, columnspan=3) root.mainloop()
关键修改说明
- 将
turtle的导入移到全局位置,避免函数重复触发时重复导入 - 所有绘图操作改为调用绑定Canvas的
re_po实例,不再使用全局turtle对象,图形直接绘制在tkinter内置画布上,不会弹出独立窗口 - 把死循环改为
for循环执行n次,绘制完成后自动终止,不会出现光标持续移动的问题 - 删除了
turtle.done()调用,避免阻塞tkinter的事件循环 - 新增
cv.delete("all"),每次点击绘制前清空画布,避免多次绘制内容重叠 - 可选添加
re_po.hideturtle(),绘制完成后隐藏光标,视觉效果更整洁
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

