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
相关产品推荐
相关产品推荐

