Воспроизведение анимации с WxPython - PullRequest
1 голос
/ 01 февраля 2020

Я пытаюсь сыграть gif в моем кадре. Я использую этот код для того, чтобы сделать это. Почему это не работает?
(я использую последнюю версию wx Python - 4.0.7.post2)

import wx
from wx.adv import AnimationCtrl

class Animate(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, -1, title)
        self.animation = AnimationCtrl(self)
        self.animation.LoadFile('scan.gif')
        self.animation.Play()
        self.Show()

app = wx.App()
frame = Animate(None, -1, 'Animation')
app.MainLoop()

Frame

Ответы [ 2 ]

1 голос
/ 02 февраля 2020

Я не вижу ничего плохого в ответе, который дал @ Rabbid76, я предлагаю вам запустить код из командной строки, а не изнутри ide.
Вот еще один подход к вашей проблеме, он такой же лаконичный, как и я. может сделать это и предполагает local файл с именем scan.gif.

import wx
from wx.adv import AnimationCtrl

class Animate(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, -1, title)
        self.animation = AnimationCtrl(self)
        self.animation.LoadFile('scan.gif')
        self.animation.Play()
        self.Show()

app = wx.App()
frame = Animate(None, -1, 'Animation')
app.MainLoop()
1 голос
/ 01 февраля 2020

Аргументом для конструктора wx.adv.Animation является имя файла. Поэтому оно должно быть:

anim = wx.adv.Animation()
anim.LoadFile(r'C:\Users\yuval\PycharmProjects\MultiTyping\pictures\back_gif.gif')

или

anim = wx.adv.Animation(r'C:\Users\yuval\PycharmProjects\MultiTyping\pictures\back_gif.gif')

Кроме того, я рекомендую добавить wx.BoxSizer к кадру:

sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(anim_ctrl)
frame.SetSizerAndFit(sizer)

См. Пример:

import wx
from wx.adv import AnimationCtrl, Animation

app=wx.App()
frame = wx.Frame(None, -1, title='2', pos=(0, 0), size=(200, 200))
app.SetTopWindow(frame)
anim = Animation(r'C:\Users\yuval\PycharmProjects\MultiTyping\pictures\back_gif.gif')
anim_ctrl = AnimationCtrl(frame, -1, anim)

sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(anim_ctrl)
frame.SetSizerAndFit(sizer)

frame.Show()
anim_ctrl.Play()

app.MainLoop()
...