python - wx.Timer 动画

标签 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()

最佳答案

首先,您确实在每次需要显示时重新加载每张图片。是的,这非常糟糕,因为这是大量的磁盘 I/O,而且磁盘可能是您的程序必须与之交互的最慢的设备。尽可能避免使用磁盘。

现在,为了缓解这个问题,有几个选择:

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

关于python - wx.Timer 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9107294/

相关文章:

python - 如何返回两个单独集合中匹配元素的总和

python - wx.ProgressDialog 在被销毁时导致段错误和/或 GTK_IS_WINDOW 失败

python - wxpython - 使用循环创建独特的 GUI 元素

python - Wxpython 状态栏事件描述

python - PyGTK、wxPython 还是 Tkinter?

python - 使用 Tweepy 下载最早的 3200 条推文?

python - 从 PostgreSQL 获取数据到 Django 并以 html 显示

python - 从字典列表中删除具有重复值的字典

python - 我如何阻止漂亮的汤在解析时跳过行?

python - Wxpython 如何更改Windows中Gauge Progress bar的颜色