Воспроизведение анимаций в GIF с помощью Tkinter

Я пытался играть в анимированный gif с помощью Tkinter.PhotoImage , но не добился успеха. Он отображает изображение, но не анимацию. Ниже приведен мой код:

 root = Tkinter.Tk() photo = Tkinter.PhotoImage(file = "path/to/image.gif") label = Tkinter.Label(image = photo) label.pack() root.mainloop() 

Он отображает изображение в окне, и все. Я думаю, что проблема имеет какое-то отношение к Tkinter.Label но я не уверен. Я искал решения, но все они говорят мне использовать PIL (Python Imaging Library), и это то, что я не хочу использовать.

С ответом я создал еще один код (который все еще не работает …), вот он:

 from Tkinter import * def run_animation(): while True: try: global photo global frame global label photo = PhotoImage( file = photo_path, format = "gif - {}".format(frame) ) label.configure(image = nextframe) frame = frame + 1 except Exception: frame = 1 break root = Tk() photo_path = "/users/zinedine/downloads/091.gif" photo = PhotoImage( file = photo_path, ) label = Label( image = photo ) animate = Button( root, text = "animate", command = run_animation ) label.pack() animate.pack() root.mainloop() 

Спасибо за все! 🙂

  • Eclipse PyDev теперь показывает все ссылки на Tkinter как ошибки
  • Как узнать текущий размер виджета в tkinter?
  • IDLE не может импортировать Tkinter. Ваш Python не может быть настроен для Tk
  • Tkinter: Как использовать потоки для предотвращения цикла основного события от «замораживания»
  • Недопустимое имя команды во время выполнения (сценарий «после»)
  • Tkinter IntVar возвращает PY_VAR0 вместо значения
  • Значение tkinter get () python из поля ввода
  • Nice IDE с дизайнером GUI для wxPython или Tkinter
  • 2 Solutions collect form web for “Воспроизведение анимаций в GIF с помощью Tkinter”

    Вы должны управлять анимацией самостоятельно в Tk. Анимированный gif состоит из нескольких кадров в одном файле. Tk загружает первый кадр, но вы можете указать разные кадры, передав индексный параметр при создании изображения. Например:

     frame2 = PhotoImage(file=imagefilename, format="gif -index 2") 

    Если вы загрузите все кадры в отдельные PhotoImages, а затем используйте события таймера, чтобы переключить отображаемый кадр ( label.configure(image=nextframe) ). Задержка на таймере позволяет контролировать скорость анимации. Нет ничего, что обеспечило бы вам количество кадров на изображении, кроме того, что он не смог создать кадр, если вы превысите количество кадров.

    См. Страницу руководства Tk для официального слова.

    Вот простой пример без создания объекта:

     from tkinter import * import time import os root = Tk() frames = [PhotoImage(file='mygif.gif',format = 'gif -index %i' %(i)) for i in range(100)] def update(ind): frame = frames[ind] ind += 1 label.configure(image=frame) root.after(100, update, ind) label = Label(root) label.pack() root.after(0, update, 0) root.mainloop() 
    Python - лучший язык программирования в мире.