Painting How-To

Gmail soutojohn at gmail.com
Mon Dec 3 21:58:26 PST 2007


Skipped content of type multipart/alternative-------------- next part -----=
---------
import wx


class Canvas(wx.Panel):
	def __init__(self, parent):
		wx.Panel.__init__(self, parent, -1)

		sizer=3Dwx.BoxSizer(wx.VERTICAL)
		self.test=3Dwx.Panel(self, -1, size=3D(256, 256))
		sizer.Add(self.test)
		self.SetSizer(sizer)

		self.buffer=3Dwx.EmptyBitmap(256, 256)
		dc=3Dwx.MemoryDC()
		dc.SelectObject(self.buffer)
		dc.SetBrush(wx.Brush('WHITE'))
		dc.FloodFill(0, 0, wx.Colour(0, 0, 0))
		dc.SelectObject(wx.NullBitmap)
		self.request_redraw=3DTrue
		self.last_x, self.last_y=3D-1, -1
		self.sel_x, self.sel_y=3D-1, -1

		self.test.Bind(wx.EVT_PAINT, self.OnPaint)
		self.test.Bind(wx.EVT_IDLE, self.OnIdle)
		self.test.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
		self.test.Bind(wx.EVT_MOTION, self.OnMotion)
		self.test.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)

	def OnPaint(self, event):
		dc=3Dwx.BufferedPaintDC(self.test, self.buffer)

	def OnIdle(self, event):
		if self.request_redraw:
			self.request_redraw=3DFalse
			self.Refresh(False)

	def OnLeftDown(self, event):
		if self.sel_x < 0:
			self.sel_x, self.sel_y=3Devent.GetX(), event.GetY()

	def OnMotion(self, event):
		dc=3Dwx.ClientDC(self.test)
		if self.sel_x > -1:
			dc.DrawLine(self.sel_x, self.sel_y, self.last_x, self.last_y)
			self.request_redraw=3DFalse
		self.last_x, self.last_y=3Devent.GetX(), event.GetY()

	def OnLeftUp(self, event):
		dc=3Dwx.BufferedDC(None, self.buffer)
		dc.DrawLine(self.sel_x, self.sel_y, self.last_x, self.last_y)
		self.sel_x, self.sel_y=3D-1, -1


a=3Dwx.App(0)
f=3Dwx.Frame(None, -1)
Canvas(f)
f.Show(True)
a.MainLoop()


More information about the wxpython-users mailing list