rendered paste body import wx class PaintPage(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent, -1) self.buffer=wx.EmptyBitmap(32, 32) self.drawing=True self.SetBackgroundColour("GRAY") self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftMouseDown) self.Bind(wx.EVT_LEFT_UP, self.OnLeftMouseUp) self.Bind(wx.EVT_MOTION, self.OnMouseMotion) self.Bind(wx.EVT_PAINT, self.OnPaint) def OnPaint(self, event): blowup=self.buffer.ConvertToImage().Scale(64, 64).ConvertToBitmap() dc=wx.BufferedPaintDC(self, blowup, wx.BUFFER_CLIENT_AREA) def OnLeftMouseDown(self, event): if event.LeftDown(): self.SetFocus() self.SetXY(event) self.CaptureMouse() self.drawing=True self.OnMouseMotion(event, True) def OnLeftMouseUp(self, event): if not event.LeftDown() and self.drawing: self.ReleaseMouse() self.drawing=False def OnMouseMotion(self, event, override=False): if (event.Dragging() or override) and self.drawing: dc=wx.BufferedDC(None, self.buffer) #dc.SetUserScale(2, 2) dc.SetPen(wx.Pen('BLUE', 4)) coordinates=(self.x, self.y) + (event.GetX(), event.GetY()) dc.DrawLine(*coordinates) self.SetXY(event) self.Refresh() def SetXY(self, event): self.x, self.y=event.GetX(), event.GetY()if __name__=='__main__': a=wx.App(0) f=wx.Frame(None, -1, 'Demo') sizer=wx.BoxSizer(wx.VERTICAL) sizer.Add(PaintPage(f), 1, wx.ALL|wx.EXPAND) f.SetSizer(sizer) f.Show() a.MainLoop()