Регистрация фигуры в модуле черепахи питона - PullRequest
0 голосов
/ 23 ноября 2018

Моя проблема:

Я пытаюсь зарегистрировать фигуру с помощью модуля python turtle, однако он отказывается работать.GIF в вопросе это , и он находится в моей папке загрузок с названием tenor.gif.Я выполняю этот код в IDE, Canopy, в Python 3.

Если я перезагружаю ядро, а затем запускаю код, я последовательно получаю один и тот же вывод , проверяя, что я имею правокаталог:

%run "C:/Users/AlexPC/Python Programs/Chess.py"
C:\Users\AlexPC\Downloads
C:\Users\AlexPC\Downloads

и та же ошибка:

---------------------------------------------------------------------------
TclError                                  Traceback (most recent call last)
C:\Users\AlexPC\Python Programs\Chess.py in <module>()
     37 print(os.getcwd())
     38 s.register_shape("tenor.gif")
---> 39 t.shape("tenor.gif")
     40 
     41 
C:\Users\AlexPC\AppData\Local\Enthought\Canopy\edm\envs\User\lib\turtle.py in shape(self, name)
   2775         if not name in self.screen.getshapes():
   2776             raise TurtleGraphicsError("There is no shape named %s" % name)
-> 2777         self.turtle._setshape(name)
   2778         self._update()
   2779 
C:\Users\AlexPC\AppData\Local\Enthought\Canopy\edm\envs\User\lib\turtle.py in _setshape(self, shapeIndex)
   2504             self._item = screen._createpoly()
   2505         elif self._type == "image":
-> 2506             self._item = screen._createimage(screen._shapes["blank"]._data)
   2507         elif self._type == "compound":
   2508             self._item = [screen._createpoly() for item in
C:\Users\AlexPC\AppData\Local\Enthought\Canopy\edm\envs\User\lib\turtle.py in _createimage(self, image)
    721         """Create and return image item on canvas.
    722         """
--> 723         return self.cv.create_image(0, 0, image=image)
    724 
    725     def _drawimage(self, item, pos, image):
<string> in create_image(self, *args, **kw)
C:\Users\AlexPC\AppData\Local\Enthought\Canopy\edm\envs\User\lib\tkinter\__init__.py in create_image(self, *args, **kw)
   2327     def create_image(self, *args, **kw):
   2328         """Create image item with coordinates x1,y1."""
-> 2329         return self._create('image', args, kw)
   2330     def create_line(self, *args, **kw):
   2331         """Create line with coordinates x1,y1,...,xn,yn."""
C:\Users\AlexPC\AppData\Local\Enthought\Canopy\edm\envs\User\lib\tkinter\__init__.py in _create(self, itemType, args, kw)
   2318         return self.tk.getint(self.tk.call(
   2319             self._w, 'create', itemType,
-> 2320             *(args + self._options(cnf, kw))))
   2321     def create_arc(self, *args, **kw):
   2322         """Create arc shaped region with coordinates x1,y1,x2,y2."""
TclError: image "pyimage1" doesn't exist 

Мой код:

from turtle import Turtle, Screen
import os


t = Turtle("square")
t.shapesize(4,4)
t.hideturtle()
t.pu()  
t.goto(-280,-280)

s = Screen()
s.clearscreen()
s.tracer(False)
s.screensize(800,800)

#register the piece shapes
print(os.getcwd())
os.chdir("C:\\Users\\AlexPC\\Downloads")
print(os.getcwd())
s.register_shape("tenor.gif")
t.shape("tenor.gif")

1 Ответ

0 голосов
/ 23 ноября 2018

Пара вопросов.Во-первых, ваша ссылка на изображение привела к анимированному GIF - в документации черепахи о поддержке анимированного GIF ничего нет.Скорее всего, в лучшем случае вы получите статическое GIF-изображение, в худшем - ничего.

Во-вторых, ваш пример кода содержит несвязанные и ненужные вещи.Давайте упростим и сосредоточимся на проблеме:

from turtle import Turtle, Screen
import os

screen = Screen()
screen.screensize(800, 800)
os.chdir(""C:\\Users\\AlexPC\\Downloads"")
screen.register_shape("tenor.gif")

turtle = Turtle("tenor.gif")
turtle.penup()  
turtle.goto(-280, -280)

screen.mainloop()

Это сработало для меня в системе Unix, поместив изображение в каталог «Downloads» в моем текущем каталоге и используя относительный os.chdir() для перемещения туда -- Я не знаю, если это проблема для Windows.Попробуйте описать вышесказанное, работает ли он для вас лучше.

...