2 votes

Comment afficher un gif animé dans l'application que je suis en train de développer ?

Je développe Discvur un simple visualiseur Imgur, pour le Ubuntu App Showdown. J'utilise donc rapidement + Glade + Gtk + Python. PyGObject au lieu de PyGtk serait très apprécié. J'aimerais afficher des gifs animés dans mon programme.

J'ai essayé d'insérer une fenêtre de visualisation, puis une image, et dans le champ "Modifier l'image", j'ai sélectionné une animation gif (dans mon cas ../media/akO1i.gif ).

Lorsque je lance mon application, le gif s'affiche mais il ne bouge pas (je ne vois que la première image).

Est-il possible d'afficher des gifs animés dans mon application ? Quelle est la meilleure façon de le faire : utiliser le widget image, ou un champ WebKit, ou quelque chose d'autre ?

4voto

Zuul Points 1904

Puisque vous avez ajouté GTK à votre question, exemple et documentation est disponible dans le didacticiel PyGTK 2.0 sur le site Web de Chapitre 9. Widgets divers .

A exemple de code en utilisant .gif pour les boutons :

#!/usr/bin/env python

# example images.py

import pygtk
pygtk.require('2.0')
import gtk

class ImagesExample:
    # when invoked (via signal delete_event), terminates the application.
    def close_application(self, widget, event, data=None):
        gtk.main_quit()
        return False

    # is invoked when the button is clicked.  It just prints a message.
    def button_clicked(self, widget, data=None):
        print "button %s clicked" % data

    def __init__(self):
        # create the main window, and attach delete_event signal to terminating
        # the application
        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        window.connect("delete_event", self.close_application)
        window.set_border_width(10)
        window.show()

        # a horizontal box to hold the buttons
        hbox = gtk.HBox()
        hbox.show()
        window.add(hbox)

        pixbufanim = gtk.gdk.PixbufAnimation("goalie.gif")
        image = gtk.Image()
        image.set_from_animation(pixbufanim)
        image.show()
        # a button to contain the image widget
        button = gtk.Button()
        button.add(image)
        button.show()
        hbox.pack_start(button)
        button.connect("clicked", self.button_clicked, "1")

        image = gtk.Image()
        image.set_from_file("soccerball.gif")
        image.show()
        # a button to contain the image widget
        button = gtk.Button()
        button.add(image)
        button.show()
        hbox.pack_start(button)
        button.connect("clicked", self.button_clicked, "2")

def main():
    gtk.main()
    return 0

if __name__ == "__main__":
    ImagesExample()
    main()

RÉPONSE ORIGINALE

Vous pouvez utiliser PyQt avec le QMovie() widget pour jouer un gif animé. Ci-dessous un exemple que j'ai trouvé plus tôt.

Exemple de Python GUI Programming | DaniWeb site web :

# use PyQt's QMovie() widget to play an animated gif
# tested with PyQt4.4 and Python 2.5
# also tetsed with PyQt4.5 and Python 3.0
# vegaseat

import sys
# expect minimal namespace conflicts
from PyQt4.QtCore import *
from PyQt4.QtGui import * 

class MoviePlayer(QWidget):
    def __init__(self, parent=None): 

    QWidget.__init__(self, parent)
    # setGeometry(x_pos, y_pos, width, height)
    self.setGeometry(200, 200, 400, 300)
    self.setWindowTitle("QMovie to show animated gif")

    # set up the movie screen on a label
    self.movie_screen = QLabel()
    # expand and center the label
    self.movie_screen.setSizePolicy(QSizePolicy.Expanding,
    QSizePolicy.Expanding)
    self.movie_screen.setAlignment(Qt.AlignCenter) 

    main_layout = QVBoxLayout()
    main_layout.addWidget(self.movie_screen)
    self.setLayout(main_layout)

    # use an animated gif file you have in the working folder
    # or give the full file path
    movie = QMovie("AG_Dog.gif", QByteArray(), self)
    movie.setCacheMode(QMovie.CacheAll)
    movie.setSpeed(100)
    self.movie_screen.setMovie(movie)
    movie.start() 

app = QApplication(sys.argv)
player = MoviePlayer()
player.show()
sys.exit(app.exec_())

1voto

SkunkSpinner Points 2683

Voici le code que j'ai finalement écrit, grâce à L'aide de Zuul . Il est plus spécifique à PyGObject, l'outil utilisé dans Quickly :

from gi.repository import Gtk, GdkPixbuf
#This is specific to my app Discvur developed in Quickly:
from discvur_lib.discvurconfig import get_data_file

[…]

    self.viewport = self.builder.get_object("viewport")
    path = get_data_file() + "/media/akO1i.gif"
    print path
    self.pixbufanim = GdkPixbuf.PixbufAnimation.new_from_file(path)
    print self.pixbufanim
    self.image = Gtk.Image()
    self.image.set_from_animation(self.pixbufanim)
    self.viewport.add(self.image)
    self.image.show()

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X