Я конвертировал картинку в GIF, но bgpic () из turtle все еще не работает - PullRequest
1 голос
/ 19 октября 2019

Вот мой код:

from tkinter import *
import turtle as t
import random
bob=Tk()
t.setup(width = 200,height = 200)
t.bgpic(picname="snakesandladders.gif")
def left(event):
    t.begin_fill()
    print("left")
    t.left(90)

def right(event):
    print("right")
    t.right(90)
def forward(event):
    print("forward")
    t.forward(100)


block = Frame(bob, width=300, height=250)
bob.bind("<a>", left)
bob.bind("<d>", right)
bob.bind("<w>", forward)
block.pack()
bob.mainloop()

И моя ошибка:

Traceback (most recent call last):
  File "/Users/lolszva/Documents/test game.py", line 6, in <module>
    t.bgpic(picname="snakesandladders.gif")
  File "<string>", line 8, in bgpic
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/turtle.py", line 1481, in bgpic
    self._bgpics[picname] = self._image(picname)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/turtle.py", line 479, in _image
    return TK.PhotoImage(file=filename)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/__init__.py", line 3545, in __init__
    Image.__init__(self, 'photo', name, cnf, master, **kw)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/__init__.py", line 3501, in __init__
    self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: couldn't open "snakesandladders.gif": no such file or directory

Я новичок, поэтому не знаю, импортировал ли я библиотеку. В другом подобном вопросе для bgpic() не работает, он сказал, чтобы преобразовать изображение в GIF, но для моего все еще не работает. Я использую Mac OSX Python версии 3.8.0.

1 Ответ

1 голос
/ 21 октября 2019

Хотя ваша проблема в отсутствующем GIF-файле, ваша программа все равно не будет работать, даже если файл существует и находится в правильном каталоге.

Вторичная проблема заключается в том, что вы запускаете автономную версию turtle поверх tkinter. Вы можете запустить turtle standalone , где он устанавливает базовый корень и окно tkinter, или вы можете запустить turtle внедренный в tkinter, где вы настроите корень и холст для перемещения черепахи. Но вызов отдельной черепахи поверх созданного вами корня tkinter завершится ошибкой:

...
    self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: image "pyimage2" doesn't exist

Вот как реализовать вашу программу в автономной черепахе:

from turtle import Screen, Turtle

def left():
    turtle.left(90)

def right():
    turtle.right(90)

def forward():
    turtle.forward(100)

screen = Screen()
screen.setup(width=200, height=200)
screen.bgpic(picname="snakesandladders.gif")

screen.onkey(left, "a")
screen.onkey(right, 'd')
screen.onkey(forward, 'w')

turtle = Turtle()

screen.listen()
screen.mainloop()

PutВаше фоновое изображение GIF в том же каталоге, что и исходный код.

Вам понадобится внедренная черепаха, если вы хотите добавить виджеты tkinter вместе с холстом черепахи. См. Документацию для RawTurtle и TurtleScreen.

Размер вашего окна невелик по сравнению с вашим расстоянием forward() - вам может потребоваться настроить одно или другое.

...