IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

wxPython Discussion :

Gif animé sur un bouton


Sujet :

wxPython

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2005
    Messages : 71
    Points : 53
    Points
    53
    Par défaut Gif animé sur un bouton
    Bonjour,

    Je cherche à placer un gif animé sur un bouton de mon application.

    Il est bien sur le bouton mais l'animation n'est pas gérer.

    Y a t'il une option ou est-ce un technique qui ressemble à celle de ce post http://www.developpez.net/forums/sho...&highlight=gif.

    Sauf que le post précédent est fait pour tkinter et pil avec wxpython ca un peu la merde.

    Alors si qqn a une solution ce serait sympa.

    Merci à tous.

  2. #2
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2005
    Messages : 71
    Points : 53
    Points
    53
    Par défaut
    Bonsoir,

    En fait j'ai trouvé un bout de réponse dans la doc wxpython.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    icone = "/home/titi-taz/Informatique/Programmation_python/AstuGeClim/images/ventil_lt_transfo.gif"
    	ani = GIFAnimationCtrl(self, -1, icone)
            ani.GetPlayer().UseBackgroundColour(True)
    	ani.Play()
    self.b_ventil_lt_transfo = ani
    Ca ça marche pour une image du gif animé.

    Le code du bouton avec image est celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.b_ventil_lt_transfo = wx.BitmapButton(self, -1, wx.Bitmap("/home/titi-taz/Informatique/Programmation_python/AstuGeClim/images/ventil_lt_transfo.gif", wx.BITMAP_TYPE_ANY))
    Mais coupler les 2 me parait pas possible.

    J'ai droit à une belle erreur si je remplace le chemin de l'image par mon objet animé.

    Et si je créé un bouton classique en mettant à la place du texte mon objet animé ça marche pas non plus.

    Alors je pense que le type de l'objet animé n'est pas compatible avec un bouton. Y a t'il moyen de faire qqch qd même ?

    Merci à tous.

  3. #3
    Membre averti
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Points : 342
    Points
    342
    Par défaut
    Le bouton avec gif animé n'existe pas en tant que widget wxpython, mais il est très facile à créer.
    Tu trouveras ci-dessous une classe que j'ai rapidement réalisée à titre d'exemple, mais qui peut servir telle qu'elle dans un projet...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    #! /usr/bin/env python
    #-*- coding: utf-8 -*-
     
    import wx
    import wx.animate as ani
    import wx.lib.evtmgr as em
     
    myEvent = wx.NewEventType() # nouveau type d event pour mon bouton
    EVT_BUTTON_ANIM = wx.PyEventBinder(myEvent, 1) # Creation d un binder pour le type
     
    class BoutonAnime(wx.Window):
        u'''Ce bouton est composé d un widget wx.Window sur lequel on centre
        un contrôle animation.
        Il attend en paramètre le nom d un fichier image gif animé.
        Pour donner l apparence d un vrai bouton, la taille du wx.Window est de 6 pixels
        supplémentaire dans les deux sens par rapport à la taille du GIF.
        On attribue la couleur blanche comme fond du bouton, et on attribue cette
        même couleur au fond du GIF à l aide de la méthode SetUseWindowBackgroundColour().
        On utilise des eventManager pour intercepter les actions de la souris sur
        le gif de façon à donner un fond gris au wx.Window lors d un appui et de le remettre
        en blanc lors du relachement, ou lorsque la souris a quitté le GIF avant relachement.
        Ce sont ces actions qui donnent l illusion d un bouton qu on enfonce.
        Enfin, on procède à l envoi d un évènement EVT_BOUTON_ANIM lors du relachement du bouton
        pour que le click puisse être intercepté par le parent.'''
        def __init__(self, parent, image):
            wx.Window.__init__(self, parent, -1, style=wx.BORDER_SIMPLE)
            self.SetBackgroundColour(wx.WHITE)
            self.image = image
            animation = ani.Animation(self.image)
            self.ctrl = ani.AnimationCtrl(self, -1, animation)
            self.ctrl.SetUseWindowBackgroundColour(True)
            self.ctrl.Play()
     
            self.Bind(wx.EVT_SIZE, self.OnSize)
            em.eventManager.Register(self.OnDown, wx.EVT_LEFT_DOWN, self.ctrl)
            em.eventManager.Register(self.OnUp,  wx.EVT_LEFT_UP, self.ctrl)
            em.eventManager.Register(self.OnLeave, wx.EVT_LEAVE_WINDOW, self.ctrl)
     
        def OnSize(self, event):
            w, h = self.ctrl.GetSizeTuple()
            taille = wx.Size(w+6, h+6)
            self.SetSize(taille)
            self.ctrl.CentreOnParent()
     
        def OnLeave(self, event):
            self.SetBackgroundColour(wx.WHITE)
            self.Refresh()
     
        def OnDown(self, event):
            self.SetBackgroundColour(wx.LIGHT_GREY)
            self.Refresh()
     
        def OnUp(self, event):
            self.SetBackgroundColour(wx.WHITE)
            self.Refresh()
            evt = wx.PyCommandEvent(myEvent, self.GetId())
            self.GetEventHandler().ProcessEvent(evt)
            event.Skip()
     
    if __name__=="__main__":
        class Test(wx.Frame):
            u'''Cette classe ne sert qu à tester le bouton. Il faut juste
            mettre un chemin valide d image gif animée en paramètre du bouton.
            chien.gif est une image valide sur ma propre machine.'''
            def __init__(self):
                wx.Frame.__init__(self, None, -1, title = u"test du bouton animé")
                self.SetBackgroundColour(wx.WHITE)
                sizer = wx.BoxSizer(wx.VERTICAL)
                self.bouton = BoutonAnime(self, "chien.gif")
                sizer.Add(self.bouton, 0, wx.ALL, 60)
                self.SetSizer(sizer)
                self.Fit()
     
                self.Bind(wx.EVT_CLOSE, self.OnClose)
                self.Bind(EVT_BUTTON_ANIM, self.OnClick, self.bouton)
     
            def OnClose(self, event):
                self.Destroy()
     
            def OnClick(self, event):
                print u"Le click sur un bouton animé fonctionne"
     
        class MyApp(wx.App):
            def OnInit(self):
                f = Test()
                f.Show(True)
                self.SetTopWindow(f)
                return True
     
        app = MyApp()
        app.MainLoop()
    Je ne traite pas les problèmes techniques par MP...
    Les forums sont là pour ça...

    Les contributions du bipede

Discussions similaires

  1. Gif animé sur une Form
    Par engrobel dans le forum C++Builder
    Réponses: 2
    Dernier message: 22/10/2008, 20h11
  2. [WD12] Gif animé sur fenetre soeur
    Par devste dans le forum WinDev
    Réponses: 6
    Dernier message: 16/06/2008, 15h13
  3. Gif animé sur excel
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 15/02/2008, 14h01
  4. gif animé sur form et si possible sur boutton
    Par netah25 dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/05/2007, 18h45
  5. gifs animés sur image jpg
    Par DARDI dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 03/03/2007, 10h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo