2014-08-28 4 views
2

Приведенный ниже код должен воспроизводить изображение gif при нажатии кнопки .. и воспроизводить другое изображение gif при нажатии другой кнопки. , но когда я нажимаю на первую кнопку, она воспроизводит связанное изображение правильно. , а при нажатии второй кнопки и первое изображение, и второе воспроизводятся один за другим в бесконечном цикле ... так как играть в один gif нажатием кнопки?wxpython для отображения изображений gif один за другим

import wx, wx.animate 

class MyForm(wx.Frame): 

    #---------------------------------------------------------------------- 
    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY) 

     panel = wx.Panel(self, wx.ID_ANY) 
     btn1 = wx.Button(self, -1, "play GIF 1",(50,10)) 
     btn1.Bind(wx.EVT_BUTTON, self.onButton1) 

     btn2 = wx.Button(self, -1, "play GIF 2",(50,40)) 
     btn2.Bind(wx.EVT_BUTTON, self.onButton2) 

    #---------------------------------------------------------------------- 
    def onButton1(self, event): 
     image='animated_1.gif' 
     self.animateGIF(image) 

    #---------------------------------------------------------------------- 
    def onButton2(self, event): 
     image='animated_2.gif' 
     self.animateGIF(image) 

    #---------------------------------------------------------------------- 
    def animateGIF(self,image): 
     gif = wx.animate.GIFAnimationCtrl(self, -1, image,pos=(50,70),size=(10,10)) 
     gif.GetPlayer() 
     gif.Play() 
#---------------------------------------------------------------------- 
app = wx.App() 
frame = MyForm().Show() 
app.MainLoop() 

ответ

1

Перед тем, как начать новый, вам необходимо остановить и уничтожить предыдущее изображение gif. Как это:

import wx, wx.animate 

class MyForm(wx.Frame): 

    #---------------------------------------------------------------------- 
    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY) 

     panel = wx.Panel(self, wx.ID_ANY) 
     btn1 = wx.Button(self, -1, "play GIF 1",(50,10)) 
     btn1.Bind(wx.EVT_BUTTON, self.onButton1) 

     btn2 = wx.Button(self, -1, "play GIF 2",(50,40)) 
     btn2.Bind(wx.EVT_BUTTON, self.onButton2) 

     self.gif = None 

    #---------------------------------------------------------------------- 
    def onButton1(self, event): 
     image='animated_1.gif' 
     self.animateGIF(image) 

    #---------------------------------------------------------------------- 
    def onButton2(self, event): 
     image='animated_2.gif' 
     self.animateGIF(image) 

    #---------------------------------------------------------------------- 
    def animateGIF(self,image): 
     if self.gif: 
      self.gif.Stop() 
      self.gif.Destroy() 

     self.gif = wx.animate.GIFAnimationCtrl(self, -1, image,pos=(50,70),size=(10,10)) 
     self.gif.GetPlayer() 
     self.gif.Play() 
#---------------------------------------------------------------------- 
app = wx.App() 
frame = MyForm().Show() 
app.MainLoop() 

Я добавил self.gif = None функции __init__ и немного изменили функцию animateGIF.

Смежные вопросы