import wx
import random

class mypanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.buffer = wx.EmptyBitmap(700, 500)
        self.SetBackgroundColour("BLUE")
        self.Bind(wx.EVT_PAINT, self.OnPaint)
        self.ID_TIMER = 1
        self.timer = wx.Timer(self, self.ID_TIMER)
        self.Bind(wx.EVT_TIMER, self.OnTimer, id=self.ID_TIMER)
        self.timer.Start(1000, wx.TIMER_CONTINUOUS)
        self.BufferPaint()
        self.Refresh(False)

    def OnTimer(self, event):
        print "OnTimerEvent " + str(event.Id)
        self.BufferPaint()

    def BufferPaint(self):
        dc = wx.MemoryDC()
        dc.SelectObject(self.buffer)
        dc.SetBackground(wx.Brush("green"))
        dc.Clear()
        sub = self.buffer.GetSubBitmap(wx.Rect(5,5,30,30))
        dc.SetBackground(wx.Brush("red"))
        dc.Clear()
        dc.DrawBitmap(sub, random.randint(0,600), random.randint(0,400))
        self.Refresh(False)

    def OnPaint(self, event=None):
        dc = wx.BufferedPaintDC(self, self.buffer)

class myframe(wx.Frame):

    """Draw a line to a panel."""

    def __init__(self, parent):
        wx.Frame.__init__(self, parent, title="Draw on Panel", size=(800,600))
        self.panel1 = mypanel(self)
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.panel1, 2, wx.EXPAND)
        self.SetSizer(self.sizer)

app = wx.App(False)
frame = myframe(None)
frame.Show()
app.MainLoop()
