[wxPython-users] Painting How-To [Screwed up last mail list]
Christopher Barker
Chris.Barker at noaa.gov
Tue Dec 4 11:46:53 PST 2007
first, a couple style comments:
- it really is better to use spaces than tabs to indent -- it's more or =
less the python standard.
- ID_TOOL_BRUSH=3Dwx.NewId()
ID_TOOL_LINE=3Dwx.NewId()
Explicit IDs are kind of ugly, see:
http://wiki.wxpython.org/wxPython_Style_Guide
Instead of ID_TOOL_whatever, you could have a tool object, or a string, =
or better yet, put your drawing code, etc into a tool object, then you =
wouldn't even need to know what kind of tool object it was.
But now to the real issues:
Your Paint handler should call the same Draw method -- rather than =
duplicating the code there.
One good method for doing this kind of thing is to not actually re-draw =
the whole buffer each time. what you can do instead is draw a "shadow" =
of your object as the mouse moves -- you do this with a ClientDC and set =
the DC mode to XOR -- draw once, you get a reverse color version, draw =
again and it's back to the original bitmap underneath.
However, what you've doing should work OK -- drawing bitmaps to the =
screen is very fast. a few issue though:
dc=3Dwx.BufferedDC(wx.ClientDC(self), self.buffer)
dc.DrawBitmap(self.buffer, 0, 0)
you don't want to draw the buffer to a buffered DC, it will draw itself. =
You want a regular ClientDC. And you want to just draw there, rather =
than in a Paint Handler (you could do it there, but you're kind of doing =
both now)
Then, on mouse-up, you need to draw the final line to the buffer -- note =
that this is why you want your drawing code to be in a Line object -- =
then you can put it in only one place.
By the way, I'd like to discourage you from making a bitmap editor like =
this -- why not make it a vector object editor -- you always save the =
resulting bitmap out later, but if you keep vector objects, then you can =
change them, move them, re-scale, etc, etc.
You might want to look at wx.lib.floatcanvas for some ideas. Or the =
latest version and extra demos here:
http://morticia.cs.dal.ca/FloatCanvas/
Enclosed is my edited version, which seems to work. It could still use =
some cleaning up.
-- =
Christopher Barker, Ph.D.
Oceanographer
Emergency Response Division
NOAA/NOS/OR&R (206) 526-6959 voice
7600 Sand Point Way NE (206) 526-6329 fax
Seattle, WA 98115 (206) 526-6317 main reception
Chris.Barker at noaa.gov
-------------- next part --------------
A non-text attachment was scrubbed...
Name: junk.py
Type: text/x-python
Size: 4305 bytes
Desc: not available
Url : http://lists.wxwidgets.org/pipermail/wxpython-users/attachments/20071=
204/ba3200b1/junk.py
More information about the wxpython-users
mailing list