无法在wxPython中播放动画
我想在我的框架里播放一个GIF动图,这个动图是我从preloaders网站上下载的:
class TestFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, -1, title, style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER)
self.animation = wx.animate.AnimationCtrl(self, pos=(40,40), size=(24, 24), name="AnimationCtrl")
self.animation.LoadFile("./gui/icons/preloader.gif", wx.animate.ANIMATION_TYPE_GIF)
self.animation.Play()
size = (310, 150)
self.SetSize(size)
self.icon = wx.Icon('./gui/icons/app.ico', wx.BITMAP_TYPE_ICO)
self.SetIcon(self.icon)
self.Show()
结果我看到的只是所有的GIF(看起来就像是把图片直接放在框架里)。我哪里做错了呢?
2 个回答
2
其实我是在用Python 3和wxPython Phoenix,但这段代码对我来说是有效的。
import wx
from wx.adv import Animation, AnimationCtrl
class TestFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, -1, title)
self.animation = AnimationCtrl(self, pos=(40,40), size=(24, 24), name="AnimationCtrl")
self.animation.LoadFile("animated.gif")
self.animation.Play()
size = (400, 400)
self.SetSize(size)
self.Show()
app = wx.App()
frame = TestFrame(None, -1, "Test gif")
app.MainLoop()
对于wxPython,我觉得你需要用GIFAnimationCtrl,而不是AnimationCtrl。不过我没有环境来测试这个。这里有相关的文档。 可惜的是,内容比较少。
更棒的是 有一篇博客文章提供了一个例子。这应该能给你一些参考。http://www.daniweb.com/software-development/python/code/216673/wxpython-animated-gif
1
我在我的电脑上测试了你的代码,运行得很好。我使用的是Python 2.7和wxPython 3.0。如果你还没有解决你的问题,可以试试这个代码:
import wx.animate
class TestFrame2( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"Testing!", pos = wx.DefaultPosition, size = ( 300,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.RESIZE_BORDER )
self.m_animCtrl1 = wx.animate.AnimationCtrl( self, wx.ID_ANY, wx.animate.NullAnimation, ( 40,40 ), ( -1,-1 ), wx.animate.AC_DEFAULT_STYLE )
self.m_animCtrl1.LoadFile( u"img.GIF" )
self.m_animCtrl1.Play()
self.Layout()
self.Show()
self.Centre( wx.BOTH )
if __name__ == "__main__":
App = wx.App()
TestFrame2(None)
App.MainLoop()