2013-05-16 2 views
4

Я пишу графический интерфейс в Tkinter Python, и я не могу найти, как использовать метод create_image на холсте, чтобы рисовать только один спрайт из спрайта. Заранее благодарю всех, кто может сказать мне, что мне нужно сделать для этого!Использование спрайтов в Tkinter

+2

Существует пример обработки спрайтов @ pygame: http://www.pygame.org/wiki/Spritesheet. Это не должно быть большим усилием, чтобы использовать его вместе с Canvas.create_image. –

ответ

3

Прежде всего, я настоятельно рекомендую вам использовать Pygame, поскольку для этой цели у него есть concrete module, а класс PhotoImage должен содержать ссылку на каждое изображение, чтобы избежать сбора мусора (что иногда немного сложно) ,

Сказав это, это пример того, как рисовать отдельные спрайты с помощью Tkinter (spritesheet, который я использовал для этого примера, - this one, преобразованный в файл GIF).

import Tkinter as tk 

class App(tk.Tk): 
    def __init__(self): 
     tk.Tk.__init__(self) 
     self.spritesheet = tk.PhotoImage(file="spritesheet.gif") 
     self.num_sprintes = 4 
     self.last_img = None 
     self.images = [self.subimage(32*i, 0, 32*(i+1), 48) for i in range(self.num_sprintes)] 
     self.canvas = tk.Canvas(self, width=100, height=100) 
     self.canvas.pack() 
     self.updateimage(0) 

    def subimage(self, l, t, r, b): 
     print(l,t,r,b) 
     dst = tk.PhotoImage() 
     dst.tk.call(dst, 'copy', self.spritesheet, '-from', l, t, r, b, '-to', 0, 0) 
     return dst 

    def updateimage(self, sprite): 
     self.canvas.delete(self.last_img) 
     self.last_img = self.canvas.create_image(16, 24, image=self.images[sprite]) 
     self.after(100, self.updateimage, (sprite+1) % self.num_sprintes) 

app = App() 
app.mainloop() 
0

У вас есть несколько вариантов здесь:

Tkinter поддерживает только 3 форматов: GIF, PGM и PPM. Вам необходимо либо преобразовать файлы в .GIF, либо загрузить их или вы можете использовать Python Imaging Library (PIL) и его расширения tkinter для использования PNG-изображения.

Вы можете скачать пакет PIL здесь: http://www.pythonware.com/products/pil/

В качестве альтернативы, как уже упоминалось выше, PyGame еще лучше встроенную поддержку изображений и может быть проще в использовании.

Удачи вам!