Painting How-To [Screwed up last mail list]
Gmail
soutojohn at gmail.com
Mon Dec 3 22:09:15 PST 2007
Skipped content of type multipart/alternative-------------- next part -----=
---------
import wx
ID_TOOL_BRUSH=3Dwx.NewId()
ID_TOOL_LINE=3Dwx.NewId()
class PaintCanvas(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1)
self.buffer=3Dwx.EmptyBitmap(256, 256)
self.left_down=3DFalse
self.right_down=3DFalse
self.last_x=3D0
self.last_y=3D0
self.selected_x=3D-1
self.selected_y=3D-1
self.control_panel=3DControlPanel()
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
self.Bind(wx.EVT_MOTION, self.OnMotion)
def UpdateCoords(self, event):
self.last_x=3Devent.GetX()
self.last_y=3Devent.GetY()
def Draw(self, event, tool=3D-1):
if tool=3D=3D-1: =
tool=3Dself.control_panel.selected_tool
try:
x, y=3Devent.GetX(), event.GetY()
except AttributeError, e:
x, y=3Dself.last_x, self.last_y
dc=3Dwx.BufferedDC(wx.ClientDC(self), self.buffer)
dc.DrawBitmap(self.buffer, 0, 0)
colour=3Dwx.Colour(*self.control_panel.GetColour())
colour2=3Dwx.Colour(*self.control_panel.GetColour(1))
if self.right_down and not self.left_down:
colour, colour2=3Dcolour2, colour
dc.SetPen(wx.Pen(colour, self.control_panel.line_width))
dc.SetBrush(wx.Brush(colour))
if tool=3D=3DID_TOOL_BRUSH:
dc.DrawLine(self.last_x, self.last_y, x, y)
elif tool=3D=3DID_TOOL_LINE:
if self.selected_x=3D=3D-1 or self.selected_y=3D=3D-1:
self.selected_x=3Dx
self.selected_y=3Dy
else:
#dc.DrawLine(self.selected_x, self.selected_y, self.last_x, self.last_y)
self.Refresh(True)
def OnLeftDown(self, event):
self.left_down=3DTrue
self.SetFocus()
self.UpdateCoords(event)
self.Draw(event)
def OnLeftUp(self, event):
self.left_down=3DFalse
self.UpdateCoords(event)
self.selected_x=3D-1
self.selected_y=3D-1
def OnRightDown(self, event):
self.right_down=3DTrue
self.SetFocus()
self.UpdateCoords(event)
self.Draw(event)
def OnRightUp(self, event):
self.right_down=3DFalse
self.UpdateCoords(event)
self.selected_x=3D-1
self.selected_y=3D-1
def OnMotion(self, event):
if self.left_down or self.right_down:
self.Draw(event)
self.UpdateCoords(event)
self.last_x=3Devent.GetX()
self.last_y=3Devent.GetY()
def OnPaint(self, event):
#dc=3Dwx.BufferedPaintDC(self, self.buffer)
dc=3Dwx.PaintDC(self)
dc.DrawBitmap(self.buffer, 0, 0)
colour=3Dwx.Colour(*self.control_panel.GetColour())
colour2=3Dwx.Colour(*self.control_panel.GetColour(1))
if self.right_down and not self.left_down:
colour, colour2=3Dcolour2, colour
dc.SetPen(wx.Pen(colour, self.control_panel.line_width))
dc.SetBrush(wx.Brush(colour))
if self.control_panel.selected_tool=3D=3DID_TOOL_LINE and self.selected_x=
> -1:
dc.DrawLine(self.selected_x, self.selected_y, self.last_x, self.last_y)
class ControlPanel:
def __init__(self):
self.selected_tool=3DID_TOOL_LINE
self.line_width=3D4
def GetColour(self, index=3D0):
if not index:
return (255, 0, 0)
else:
return (0, 0, 255)
if __name__=3D=3D'__main__':
a=3Dwx.App(0)
f=3Dwx.Frame(None, -1, 'Paint Test')
PaintCanvas(f)
f.Show()
a.MainLoop()
More information about the wxpython-users
mailing list