使用 tkinter 按钮在 turtle 中打开图像时出现错误 'pyimage1' 不存在

I am having an error 'pyimage1' doesn't exist while opening image in turtle with tkinter button

尽管它与内置的海龟形状配合得很好,但它不适用于 新注册 shapes.The 错误是 pyimage1 不存在,我的程序和文件都在同一个目录中 这是代码

      root=Tk()
      import turtle
      def image():
        global img
        img='batman.gif'
        player=turtle.Turtle()
        wn=turtle.Screen()
        wn.register_shape(img)
        player.shape(img)
      B=Button(root,text='click',command=image).pack()```

The error shown is:```Exception in Tkinter callback
Traceback (most recent call last):
 File "C:\Users\dell\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1705, in __call__
   return self.func(*args)
 File "C:\Users\dell\OneDrive\Desktop\imagetk.py", line 10, in image
   player.shape(img)
 File "C:\Users\dell\AppData\Local\Programs\Python\Python37\lib\turtle.py", line 2777, in shape
   self.turtle._setshape(name)
 File "C:\Users\dell\AppData\Local\Programs\Python\Python37\lib\turtle.py", line 2506, in _setshape
   self._item = screen._createimage(screen._shapes["blank"]._data)
 File "C:\Users\dell\AppData\Local\Programs\Python\Python37\lib\turtle.py", line 723, in _createimage
   return self.cv.create_image(0, 0, image=image)
 File "<string>", line 1, in create_image
 File "C:\Users\dell\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 2489, in create_image
   return self._create('image', args, kw)
 File "C:\Users\dell\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 2480, in _create
   *(args + self._options(cnf, kw))))
_tkinter.TclError: image "pyimage1" doesn't exist```




问题是您混合 turtle 和 tkinter 的方式正在创建导致此错误的两个根。当您应该使用 embedded 乌龟时,您正在尝试使用 standalone 乌龟。 IE。你应该使用 RawTurtle 而不是 TurtleRawScreen 而不是 Screen。但是不要只是交换名称,在文档中查找它们。您的代码应大致如下所示:

from tkinter import *
from turtle import TurtleScreen, RawTurtle

IMAGE = 'batman.gif'

def image():
    player = RawTurtle(screen)
    player.shape(IMAGE)

root = Tk()

Button(root, text='click', command=image).pack()

canvas = Canvas(root)
canvas.pack()

screen = TurtleScreen(canvas)
screen.register_shape(IMAGE)

screen.mainloop()