Вам не хватает пары вещей. Во-первых, wx.Timer выходит из области видимости, как только вы достигли конца метода init , поэтому он уничтожается, прежде чем он вообще что-то делает. Далее, вы хотите использовать Refresh () вместо Update (), так как Refresh () пометит прямоугольник (или весь экран) как «грязный» и заставит его перекрашиваться. См. Документы для получения дополнительной информации: http://www.wxpython.org/docs/api/wx.Window-class.html
Вот обновленная версия, которая работает на моем компьютере с Windows:
import wx
WHITE_COLOR = (255,255,255)
class AnimationPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.boxParameters = [10,10,60,60]
self.SetBackgroundColour(wx.Colour(*WHITE_COLOR))
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.timer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)
self.timer.Start(100)
def OnPaint(self, event):
dc = wx.PaintDC(self)
self.paintBox(dc)
def OnTimer(self, event):
self.boxParameters[0] += 3
print self.boxParameters
self.Refresh()
def paintBox(self, dc):
dc.SetBrush(wx.Brush("blue"))
dc.DrawRectangle(*self.boxParameters)
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Box with far and back movement", size=(300,200))
AnimationPanel(self)
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MainFrame()
frame.Show(True)
app.MainLoop()