wx.Timer动画

时间:2012-02-02 04:45:10

标签: python wxpython

简单的动画,这可行,但替换的图像数据会留在缓冲区吗? 并且正在使用定时器对动画有害的CPU?我的意思是self.timer.Start(25)从单个图像文件中做一些很酷的动画。

self.nm = ['01.png', '02.png', '03.png', '04.png']
self.stop = 0

def time(self, event):
    self.count += 1
    if self.count == 1:
        self.anime = wx.StaticBitmap(self, -1, wx.Bitmap(self.nm[self.stop], wx.BITMAP_TYPE_ANY))
    if self.count == 2:
        self.anime.Show(0)
        if self.stop == 3:
            self.timer.Stop()
        else:
            self.stop+=1
            self.count = 0
    event.Skip()

1 个答案:

答案 0 :(得分:1)

首先,每次需要显示时,您确实正在重新加载每个图像。是的,这非常糟糕,因为这是很多磁盘I / O,而磁盘可能是您的程序必须与之交互的最慢设备。尽可能避免不惜一切代价使用磁盘。

现在,为了缓解这一点,有几个选择:

  • 创建自己的wx.animate.Animation子类以匹配您的动画(需要覆盖wx.animate.Animation中的某些方法,还需要覆盖wx.animate.AnimationBase中的一些方法。这是解决此问题的正确方法,但不是最简单的。
  • 如果您的动画可以转换为.gif而没有可接受的细节丢失,请使用wx.animate.AnimationCtrl。这比以前的解决方案稍微容易一些,因为您不必编写任何动画代码。
  • 将位图保留在内存中;只是将它们存储在某个地方的列表中(“某处”并不意味着在time函数本身内部,因为每次调用函数time时仍会重新加载;“某处”表示作为成员time函数所属的对象。)
  • 将所有位图保留在用户界面中,只需在需要更改框架时切换它们之间的可见性。