I create a new bitmap on each frame so that everything draws on a new canvas but apparently something else is going on, each frame seems to be drawing on top of the previous, is there something I have to modify in this code:
import wx
class MyPanel(wx.Window):
def __init__(self, parent, *args, **kwargs):
wx.Window.__init__(self)
self.SetBackgroundStyle(wx.BG_STYLE_TRANSPARENT)
self.Create(parent, style=wx.TRANSPARENT_WINDOW, *args, **kwargs)
self.SetBackgroundColour(wx.TransparentColour)
# ~ self.SetBackgroundColour((200,100,100,10))
self.SetTransparent(0)
self.Bind(wx.EVT_PAINT, self.OnPaint, self)
self.Bind(wx.EVT_ERASE_BACKGROUND, lambda ev: None)
self.timer = wx.Timer(self)
self.timer.Start(20, oneShot=False)
self.Bind(wx.EVT_TIMER, lambda ev: self.Refresh(eraseBackground=True), self.timer)
self.bmp = wx.Bitmap.FromRGBA(*self.GetSize(), 0,0,0,wx.ALPHA_TRANSPARENT)
def OnPaint(self, event):
print("painting")
self.bmp = wx.Bitmap.FromRGBA(*self.GetSize(), 0,0,0,wx.ALPHA_TRANSPARENT)
dc = wx.BufferedDC(wx.ClientDC(self), self.bmp)
# ~ dc = wx.BufferedPaintDC(self, self.bmp)
# ~ dc = wx.PaintDC(self)
dc.SetBackgroundMode(wx.TRANSPARENT)
dc.SetBackground(wx.TRANSPARENT_BRUSH)
dc.Clear() #This should be clearing the drawing!
gc = wx.GCDC(dc)
gc.SetBrush(wx.Brush((255,255,0,10)))
gc.DrawRectangle(0,0,*dc.GetSize())
gc.SetBrush(wx.Brush((255,255,0,55)))
gc.DrawRectangle(100,100,100,100)
gc.DrawText("square", 200,100)
gc.SetBrush(wx.Brush((0, 255, 255, 55)))
gc.DrawRectangle(100,300,100,100)
gc.DrawText("square", 200,300)
class MyFrame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
panel = MyPanel(self)
button1 = wx.Button(panel, label="button")
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, title="Frame", size=(400, 800))
frame.SetBackgroundColour("blue")
self.SetTopWindow(frame)
frame.Show(True)
return True
app = MyApp()
app.MainLoop()