【问题标题】:tkinter create_image not workingtkinter create_image 不工作
【发布时间】:2015-04-12 01:39:14
【问题描述】:

我已经尝试修复这个错误好几个小时了,但我完全迷失了。我正在尝试在我的 tkinter 画布上绘制图像。当我使用以下代码初始化一个类时,首先创建了画布:

self.obj = tk.Tk()
self.screen = tk.Canvas(self.obj, bg='black', height='320', width='640')
self.screen.pack()
self.pixel = tk.PhotoImage(file="pixel.gif")
self.obj.mainloop()

然后在稍后的函数中,我尝试使用以下代码将self.pixel 绘制到画布上:

 self.screen.create_image((160, 320), image=self.pixel, anchor = tk.CENTER)

这个语句肯定会执行,但没有任何东西被绘制到画布上。当我退出 tkinter 窗口时,以下回溯会打印到控制台:

File "c:\Python33\lib\tkinter\__init__.py", line 2284, in create_image
    return self._create('image', args, kw)
File "c:\Python33\lib\tkinter\__init__.py", line 2275, in _create
    *(args + self._options(cnf, kw))))
_tkinter.TclError: invalid command name ".43421368"

每次我运行程序时,“无效命令”的名称都会更改,但错误消息的其余部分保持不变。

感谢您的帮助。

【问题讨论】:

    标签: python-3.x tkinter


    【解决方案1】:

    _tkinter.TclError: invalid command name ".43421368" 表示您正在尝试调用已销毁的小部件上的方法。

    按照您写问题的方式,听起来您的代码在 mainloop() 被调用并退出之后执行。确保所有代码在mainloop() 返回之前执行。

    【讨论】:

      【解决方案2】:

      你试过了吗:

      self.screen.create_image(160, 320, image=self.pixel, anchor = tk.CENTER)
      

      【讨论】:

      • 也许这会有所帮助。我尝试将 self.screen.create_image 调用放在 self.obj.mainloop() 调用之前。现在它正在绘制图像。你知道为什么会这样吗?
      • 是的。 mainloop 之后的所有代码都不会在 mainloop 退出之前执行,通常是在程序结束时...
      • hmm,如果我需要在程序运行时显示屏幕,我应该把 mainloop() 放在哪里?
      • 您设置 gui,包括命令、事件处理程序和定时事件,并启动事件处理程序 mainloop。当 mainloop 运行时,它会调用您的代码以响应用户事件(键、鼠标)和定时事件。在 SO 上对 tkinter questins 的回答中有几个例子。
      猜你喜欢
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多