You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter报错invalid command name ".!canvas",无法创建图形求助

Tkinter画布创建矩形报错:invalid command name ".!canvas"

使用Tkinter制作小游戏时,创建固定大小窗口和画布后,调用create_rectangle方法创建矩形失败,报错_tkinter.TclError: invalid command name ".!canvas",其他Tkinter代码可正常运行。

出错代码

import tkinter

okno = tkinter.Tk()
okno.geometry("1280x720")

platno = tkinter.Canvas(width = 1280, height = 720)
platno.pack()

okno.resizable(False, False)
okno.mainloop()

platno.create_rectangle(50,50,100,100)

错误栈信息

Traceback (most recent call last):
  File "C:\Users\Motix\Desktop\LOLKO.py", line 12, in <module>
    platno.create_rectangle(50,50,100,100)
  File "C:\Users\Motix\AppData\Local\Programs\Thonny\lib\tkinter\__init__.py", line 2835, in create_rectangle
    return self._create('rectangle', args, kw)
  File "C:\Users\Motix\AppData\Local\Programs\Thonny\lib\tkinter\__init__.py", line 2805, in _create
    return self.tk.getint(self.tk.call(
_tkinter.TclError: invalid command name ".!canvas"

问题原因与解决方案

问题出在代码执行顺序:okno.mainloop()会启动Tkinter的事件循环,直到窗口关闭才会结束执行。窗口关闭后,画布对象platno已经被销毁,此时再调用platno.create_rectangle就会触发无效命令的错误。

只需将创建矩形的代码移到okno.mainloop()之前即可:

import tkinter

okno = tkinter.Tk()
okno.geometry("1280x720")

platno = tkinter.Canvas(width = 1280, height = 720)
platno.pack()

# 将创建矩形的代码移到mainloop之前
platno.create_rectangle(50,50,100,100)

okno.resizable(False, False)
okno.mainloop()

内容的提问来源于stack exchange,提问作者Moti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 16:02:49