]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/FloatCanvas.py
5 import numpy
.random
as RandomArray
7 #print "Using numpy, version:", N.__version__
12 "The FloatCanvas requires the numpy module, version 1.* \n\n"
13 "You can get info about it at:\n"
14 "http://numpy.scipy.org/\n\n"
17 #---------------------------------------------------------------------------
20 def BuildDrawFrame(): # this gets called when needed, rather than on import
22 from floatcanvas
import NavCanvas
, FloatCanvas
, Resources
23 except ImportError: # if it's not there locally, try the wxPython lib.
24 from wx
.lib
.floatcanvas
import NavCanvas
, FloatCanvas
, Resources
25 import wx
.lib
.colourdb
28 class DrawFrame(wx
.Frame
):
31 A frame used for the FloatCanvas Demo
36 def __init__(self
,parent
, id,title
,position
,size
):
37 wx
.Frame
.__init
__(self
,parent
, id,title
,position
, size
)
40 MenuBar
= wx
.MenuBar()
43 item
= file_menu
.Append(-1, "&Close","Close this frame")
44 self
.Bind(wx
.EVT_MENU
, self
.OnQuit
, item
)
46 item
= file_menu
.Append(-1, "&SavePNG","Save the current image as a PNG")
47 self
.Bind(wx
.EVT_MENU
, self
.OnSavePNG
, item
)
48 MenuBar
.Append(file_menu
, "&File")
52 item
= draw_menu
.Append(-1, "&Clear","Clear the Canvas")
53 self
.Bind(wx
.EVT_MENU
, self
.Clear
, item
)
55 item
= draw_menu
.Append(-1, "&Draw Test","Run a test of drawing random components")
56 self
.Bind(wx
.EVT_MENU
, self
.DrawTest
, item
)
58 item
= draw_menu
.Append(-1, "&Line Test","Run a test of drawing random lines")
59 self
.Bind(wx
.EVT_MENU
, self
.LineTest
, item
)
61 item
= draw_menu
.Append(-1, "Draw &Map","Run a test of drawing a map")
62 self
.Bind(wx
.EVT_MENU
, self
.DrawMap
, item
)
64 item
= draw_menu
.Append(-1, "&Text Test","Run a test of text drawing")
65 self
.Bind(wx
.EVT_MENU
, self
.TestText
, item
)
67 item
= draw_menu
.Append(-1, "&ScaledText Test","Run a test of text drawing")
68 self
.Bind(wx
.EVT_MENU
, self
.TestScaledText
, item
)
70 item
= draw_menu
.Append(-1, "&ScaledTextBox Test","Run a test of the Scaled Text Box")
71 self
.Bind(wx
.EVT_MENU
, self
.TestScaledTextBox
, item
)
73 item
= draw_menu
.Append(-1, "&Bitmap Test","Run a test of the Bitmap Object")
74 self
.Bind(wx
.EVT_MENU
, self
.TestBitmap
, item
)
76 item
= draw_menu
.Append(-1, "&Hit Test","Run a test of the hit test code")
77 self
.Bind(wx
.EVT_MENU
, self
.TestHitTest
, item
)
79 item
= draw_menu
.Append(-1, "Hit Test &Foreground","Run a test of the hit test code with a foreground Object")
80 self
.Bind(wx
.EVT_MENU
, self
.TestHitTestForeground
, item
)
82 item
= draw_menu
.Append(-1, "&Animation","Run a test of Animation")
83 self
.Bind(wx
.EVT_MENU
, self
.TestAnimation
, item
)
85 #item = draw_menu.Append(-1, "&Speed","Run a test of Drawing Speed")
86 #self.Bind(wx.EVT_MENU, self.SpeedTest, item)
88 item
= draw_menu
.Append(-1, "Change &Properties","Run a test of Changing Object Properties")
89 self
.Bind(wx
.EVT_MENU
, self
.PropertiesChangeTest
, item
)
91 item
= draw_menu
.Append(-1, "&Arrows","Run a test of Arrows")
92 self
.Bind(wx
.EVT_MENU
, self
.ArrowTest
, item
)
94 item
= draw_menu
.Append(-1, "&ArrowLine Test","Run a test of drawing Arrow Lines")
95 self
.Bind(wx
.EVT_MENU
, self
.ArrowLineTest
, item
)
97 item
= draw_menu
.Append(-1, "&Hide","Run a test of hiding and showing objects")
98 self
.Bind(wx
.EVT_MENU
, self
.HideTest
, item
)
100 MenuBar
.Append(draw_menu
, "&Tests")
102 view_menu
= wx
.Menu()
103 item
= view_menu
.Append(-1, "Zoom to &Fit","Zoom to fit the window")
104 self
.Bind(wx
.EVT_MENU
, self
.ZoomToFit
, item
)
105 MenuBar
.Append(view_menu
, "&View")
107 help_menu
= wx
.Menu()
108 item
= help_menu
.Append(-1, "&About",
109 "More information About this program")
110 self
.Bind(wx
.EVT_MENU
, self
.OnAbout
, item
)
111 MenuBar
.Append(help_menu
, "&Help")
113 self
.SetMenuBar(MenuBar
)
115 self
.CreateStatusBar()
119 NC
= NavCanvas
.NavCanvas(self
,
121 BackgroundColor
= "DARK SLATE BLUE")
123 self
.Canvas
= NC
.Canvas
# reference the contained FloatCanvas
125 self
.MsgWindow
= wx
.TextCtrl(self
, wx
.ID_ANY
,
126 "Look Here for output from events\n",
127 style
= (wx
.TE_MULTILINE |
132 ##Create a sizer to manage the Canvas and message window
133 MainSizer
= wx
.BoxSizer(wx
.VERTICAL
)
134 MainSizer
.Add(NC
, 4, wx
.EXPAND
)
135 MainSizer
.Add(self
.MsgWindow
, 1, wx
.EXPAND | wx
.ALL
, 5)
137 self
.SetSizer(MainSizer
)
138 self
.Bind(wx
.EVT_CLOSE
, self
.OnCloseWindow
)
140 self
.Canvas
.Bind(FloatCanvas
.EVT_MOTION
, self
.OnMove
)
141 self
.Canvas
.Bind(FloatCanvas
.EVT_MOUSEWHEEL
, self
.OnWheel
)
143 self
.EventsAreBound
= False
145 ## getting all the colors for random objects
146 wx
.lib
.colourdb
.updateColourDB()
147 self
.colors
= wx
.lib
.colourdb
.getColourList()
153 self
.MsgWindow
.AppendText(text
)
154 if not text
[-1] == "\n":
155 self
.MsgWindow
.AppendText("\n")
158 def BindAllMouseEvents(self
):
159 if not self
.EventsAreBound
:
160 ## Here is how you catch FloatCanvas mouse events
161 self
.Canvas
.Bind(FloatCanvas
.EVT_LEFT_DOWN
, self
.OnLeftDown
)
162 self
.Canvas
.Bind(FloatCanvas
.EVT_LEFT_UP
, self
.OnLeftUp
)
163 self
.Canvas
.Bind(FloatCanvas
.EVT_LEFT_DCLICK
, self
.OnLeftDouble
)
165 self
.Canvas
.Bind(FloatCanvas
.EVT_MIDDLE_DOWN
, self
.OnMiddleDown
)
166 self
.Canvas
.Bind(FloatCanvas
.EVT_MIDDLE_UP
, self
.OnMiddleUp
)
167 self
.Canvas
.Bind(FloatCanvas
.EVT_MIDDLE_DCLICK
, self
.OnMiddleDouble
)
169 self
.Canvas
.Bind(FloatCanvas
.EVT_RIGHT_DOWN
, self
.OnRightDown
)
170 self
.Canvas
.Bind(FloatCanvas
.EVT_RIGHT_UP
, self
.OnRightUp
)
171 self
.Canvas
.Bind(FloatCanvas
.EVT_RIGHT_DCLICK
, self
.OnRightDouble
)
173 self
.EventsAreBound
= True
176 def UnBindAllMouseEvents(self
):
177 ## Here is how you unbind FloatCanvas mouse events
178 self
.Canvas
.Unbind(FloatCanvas
.EVT_LEFT_DOWN
)
179 self
.Canvas
.Unbind(FloatCanvas
.EVT_LEFT_UP
)
180 self
.Canvas
.Unbind(FloatCanvas
.EVT_LEFT_DCLICK
)
182 self
.Canvas
.Unbind(FloatCanvas
.EVT_MIDDLE_DOWN
)
183 self
.Canvas
.Unbind(FloatCanvas
.EVT_MIDDLE_UP
)
184 self
.Canvas
.Unbind(FloatCanvas
.EVT_MIDDLE_DCLICK
)
186 self
.Canvas
.Unbind(FloatCanvas
.EVT_RIGHT_DOWN
)
187 self
.Canvas
.Unbind(FloatCanvas
.EVT_RIGHT_UP
)
188 self
.Canvas
.Unbind(FloatCanvas
.EVT_RIGHT_DCLICK
)
190 self
.EventsAreBound
= False
193 def PrintCoords(self
,event
):
194 self
.Log("coords are: %s"%(event
.Coords
,))
195 self
.Log("pixel coords are: %s\n"%(event
.GetPosition(),))
197 def OnSavePNG(self
, event
=None):
200 self
, message
="Save file as ...", defaultDir
=os
.getcwd(),
201 defaultFile
="", wildcard
="*.png", style
=wx
.SAVE
203 if dlg
.ShowModal() == wx
.ID_OK
:
205 if not(path
[-4:].lower() == ".png"):
207 self
.Canvas
.SaveAsImage(path
)
210 def OnLeftDown(self
, event
):
212 self
.PrintCoords(event
)
214 def OnLeftUp(self
, event
):
216 self
.PrintCoords(event
)
218 def OnLeftDouble(self
, event
):
219 self
.Log("LeftDouble")
220 self
.PrintCoords(event
)
222 def OnMiddleDown(self
, event
):
223 self
.Log("MiddleDown")
224 self
.PrintCoords(event
)
226 def OnMiddleUp(self
, event
):
228 self
.PrintCoords(event
)
230 def OnMiddleDouble(self
, event
):
231 self
.Log("MiddleDouble")
232 self
.PrintCoords(event
)
234 def OnRightDown(self
, event
):
235 self
.Log("RightDown")
236 self
.PrintCoords(event
)
238 def OnRightUp(self
, event
):
240 self
.PrintCoords(event
)
242 def OnRightDouble(self
, event
):
243 self
.Log("RightDouble")
244 self
.PrintCoords(event
)
246 def OnWheel(self
, event
):
247 self
.Log("Mouse Wheel")
248 self
.PrintCoords(event
)
249 Rot
= event
.GetWheelRotation()
250 Rot
= Rot
/ abs(Rot
) * 0.1
251 if event
.ControlDown(): # move left-right
252 self
.Canvas
.MoveImage( (Rot
, 0), "Panel" )
254 self
.Canvas
.MoveImage( (0, Rot
), "Panel" )
256 def OnMove(self
, event
):
258 Updates the status bar with the world coordinates
260 self
.SetStatusText("%.2f, %.2f"%tuple(event
.Coords
))
263 def OnAbout(self
, event
):
264 dlg
= wx
.MessageDialog(self
,
265 "This is a small program to demonstrate\n"
266 "the use of the FloatCanvas\n",
268 wx
.OK | wx
.ICON_INFORMATION
)
272 def ZoomToFit(self
,event
):
273 self
.Canvas
.ZoomToBB()
275 def Clear(self
,event
= None):
276 self
.UnBindAllMouseEvents()
277 self
.Canvas
.InitAll()
280 def OnQuit(self
,event
):
283 def OnCloseWindow(self
, event
):
286 def DrawTest(self
,event
=None):
288 This demo draws a few of everything
292 wx
.GetApp().Yield(True)
297 self
.BindAllMouseEvents()
302 ## these set the limits for how much you can zoom in and out
304 Canvas
.MaxScale
= 500
307 ############# Random tests of everything ##############
311 xy
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
312 lw
= random
.randint(1,5)
313 cf
= random
.randint(0,len(colors
)-1)
314 wh
= (random
.randint(1,5), random
.randint(1,5))
315 Canvas
.AddRectangle(xy
, wh
, LineWidth
= lw
, FillColor
= colors
[cf
])
319 xy
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
320 lw
= random
.randint(1,5)
321 cf
= random
.randint(0,len(colors
)-1)
322 h
= random
.randint(1,5)
323 w
= random
.randint(1,5)
324 Canvas
.AddEllipse(xy
, (h
,w
), LineWidth
= lw
,FillColor
= colors
[cf
])
328 xy
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
329 D
= random
.randint(1,50)
330 cf
= random
.randint(0,len(colors
)-1)
331 Canvas
.AddPoint(xy
, Color
= colors
[cf
], Diameter
= D
)
335 xy
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
336 S
= random
.randint(1, 50)
337 cf
= random
.randint(0,len(colors
)-1)
338 Canvas
.AddSquarePoint(xy
, Color
= colors
[cf
], Size
= S
)
342 xy
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
343 D
= random
.randint(1,5)
344 lw
= random
.randint(1,5)
345 cf
= random
.randint(0,len(colors
)-1)
346 cl
= random
.randint(0,len(colors
)-1)
347 Canvas
.AddCircle(xy
, D
, LineWidth
= lw
, LineColor
= colors
[cl
], FillColor
= colors
[cf
])
348 Canvas
.AddText("Circle # %i"%(i), xy
, Size
= 12, BackgroundColor
= None, Position
= "cc")
352 for j
in range(random
.randint(2,10)):
353 point
= (random
.randint(Range
[0],Range
[1]),random
.randint(Range
[0],Range
[1]))
355 lw
= random
.randint(1,10)
356 cf
= random
.randint(0,len(colors
)-1)
357 cl
= random
.randint(0,len(colors
)-1)
358 Canvas
.AddLine(points
, LineWidth
= lw
, LineColor
= colors
[cl
])
362 for j
in range(random
.randint(2,6)):
363 point
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
365 lw
= random
.randint(1,6)
366 cf
= random
.randint(0,len(colors
)-1)
367 cl
= random
.randint(0,len(colors
)-1)
368 Canvas
.AddPolygon(points
,
370 LineColor
= colors
[cl
],
371 FillColor
= colors
[cf
],
377 points
= RandomArray
.uniform(Range
[0],Range
[1],(100,2))
378 cf
= random
.randint(0,len(colors
)-1)
379 D
= random
.randint(1,4)
380 Canvas
.AddPointSet(points
, Color
= colors
[cf
], Diameter
= D
)
383 String
= "Unscaled text"
385 ts
= random
.randint(10,40)
386 cf
= random
.randint(0,len(colors
)-1)
387 xy
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
388 Canvas
.AddText(String
, xy
, Size
= ts
, Color
= colors
[cf
], Position
= "cc")
391 String
= "Scaled text"
393 ts
= random
.random()*3 + 0.2
394 cf
= random
.randint(0,len(colors
)-1)
395 Point
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
396 Canvas
.AddScaledText(String
, Point
, Size
= ts
, Color
= colors
[cf
], Position
= "cc")
400 Points
= RandomArray
.uniform(Range
[0], Range
[1], (N
,2) )
402 Canvas
.AddArrow(Points
[i
],
403 random
.uniform(20,100),
404 Direction
= random
.uniform(0,360),
405 LineWidth
= random
.uniform(1,5),
406 LineColor
= colors
[random
.randint(0,len(colors
)-1)],
407 ArrowHeadAngle
= random
.uniform(20,90))
412 for j
in range(random
.randint(2,10)):
413 point
= (random
.randint(Range
[0],Range
[1]),random
.randint(Range
[0],Range
[1]))
415 lw
= random
.randint(1,10)
416 cf
= random
.randint(0,len(colors
)-1)
417 cl
= random
.randint(0,len(colors
)-1)
418 Canvas
.AddArrowLine(points
, LineWidth
= lw
, LineColor
= colors
[cl
], ArrowHeadSize
= 16)
423 def TestAnimation(self
,event
=None):
426 In this test, a relatively complex background is drawn, and
427 a simple object placed in the foreground is moved over
428 it. This demonstrates how to use the InForeground attribute
429 to make an object in the foregorund draw fast, without
430 having to re-draw the whole background.
433 wx
.GetApp().Yield(True)
437 self
.UnBindAllMouseEvents()
441 ## Random tests of everything:
445 xy
= (random
.uniform(Range
[0],Range
[1]), random
.uniform(Range
[0],Range
[1]))
446 lw
= random
.randint(1,5)
447 cf
= random
.randint(0,len(colors
)-1)
448 wh
= (random
.randint(1,5), random
.randint(1,5) )
449 Canvas
.AddRectangle(xy
, wh
, LineWidth
= lw
, FillColor
= colors
[cf
])
453 xy
= (random
.uniform(Range
[0],Range
[1]), random
.uniform(Range
[0],Range
[1]))
454 lw
= random
.randint(1,5)
455 cf
= random
.randint(0,len(colors
)-1)
456 wh
= (random
.randint(1,5), random
.randint(1,5) )
457 Canvas
.AddEllipse(xy
, wh
, LineWidth
= lw
, FillColor
= colors
[cf
])
461 xy
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
462 D
= random
.randint(1,5)
463 lw
= random
.randint(1,5)
464 cf
= random
.randint(0,len(colors
)-1)
465 cl
= random
.randint(0,len(colors
)-1)
466 Canvas
.AddCircle(xy
, D
, LineWidth
= lw
, LineColor
= colors
[cl
], FillColor
= colors
[cf
])
467 Canvas
.AddText("Circle # %i"%(i), xy
, Size
= 12, BackgroundColor
= None, Position
= "cc")
472 for j
in range(random
.randint(2,10)):
473 point
= (random
.randint(Range
[0],Range
[1]),random
.randint(Range
[0],Range
[1]))
475 lw
= random
.randint(1,10)
476 cf
= random
.randint(0,len(colors
)-1)
477 cl
= random
.randint(0,len(colors
)-1)
478 Canvas
.AddLine(points
, LineWidth
= lw
, LineColor
= colors
[cl
])
483 for j
in range(random
.randint(2,6)):
484 point
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
486 lw
= random
.randint(1,6)
487 cf
= random
.randint(0,len(colors
)-1)
488 cl
= random
.randint(0,len(colors
)-1)
489 Canvas
.AddPolygon(points
,
491 LineColor
= colors
[cl
],
492 FillColor
= colors
[cf
],
496 String
= "Scaled text"
498 ts
= random
.random()*3 + 0.2
499 cf
= random
.randint(0,len(colors
)-1)
500 xy
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
501 Canvas
.AddScaledText(String
, xy
, Size
= ts
, Color
= colors
[cf
], Position
= "cc")
504 # Now the Foreground Object:
505 C
= Canvas
.AddCircle((0,0), 7, LineWidth
= 2,LineColor
= "Black",FillColor
= "Red", InForeground
= True)
506 T
= Canvas
.AddScaledText("Click to Move", (0,0), Size
= 0.6, Position
= 'cc', InForeground
= True)
507 C
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.MoveMe
)
510 self
.Timer
= wx
.PyTimer(self
.ShowFrame
)
511 self
.FrameDelay
= 50 # milliseconds
516 Object
= self
.MovingObject
518 if self
.TimeStep
< self
.NumTimeSteps
:
520 if x
> Range
[1] or x
< Range
[0]:
522 if y
> Range
[1] or y
< Range
[0]:
524 Object
.Move( (self
.dx
,self
.dy
) )
525 Object
.Text
.Move( (self
.dx
,self
.dy
))
528 wx
.GetApp().Yield(True)
533 def MoveMe(self
, Object
):
534 self
.MovingObject
= Object
536 self
.dx
= random
.uniform(Range
[0]/4,Range
[1]/4)
537 self
.dy
= random
.uniform(Range
[0]/4,Range
[1]/4)
540 self
.NumTimeSteps
= 200
542 self
.Timer
.Start(self
.FrameDelay
)
543 #print "Did %i frames in %f seconds"%(N, (time.time() - start) )
545 def TestHitTest(self
, event
=None):
546 wx
.GetApp().Yield(True)
548 self
.UnBindAllMouseEvents()
553 #Add a Hit-able rectangle
561 #Add one that is not HitAble
562 Canvas
.AddRectangle((x
,y
), (w
, h
), LineWidth
= 2)
563 Canvas
.AddText("Not Hit-able", (x
,y
), Size
= FontSize
, Position
= "bl")
567 R
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth
= 2)
568 R
.Name
= "Line Rectangle"
570 R
.HitLineWidth
= 5 # Makes it a little easier to hit
571 R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectGotHit
)
572 Canvas
.AddText("Left Click Line", (x
,y
), Size
= FontSize
, Position
= "bl")
573 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
577 R
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth
= 2, FillColor
= color
)
578 R
.Name
= color
+ "Rectangle"
579 R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectGotHit
)
580 Canvas
.AddText("Left Click Fill", (x
, y
), Size
= FontSize
, Position
= "bl")
581 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
586 R
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth
= 2, FillColor
= color
)
587 R
.Name
= color
+ " Rectangle"
588 R
.Bind(FloatCanvas
.EVT_FC_RIGHT_DOWN
, self
.RectGotHit
)
589 Canvas
.AddText("Right Click Fill", (x
, y
), Size
= FontSize
, Position
= "bl")
590 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
594 R
= Canvas
.AddEllipse((x
, y
), (w
, h
),LineWidth
= 2,FillColor
= color
)
595 R
.Name
= color
+" Ellipse"
596 R
.Bind(FloatCanvas
.EVT_FC_RIGHT_DOWN
, self
.RectGotHit
)
597 Canvas
.AddText("Right Click Fill", (x
, y
), Size
= FontSize
, Position
= "bl")
598 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
602 R
= Canvas
.AddCircle((x
+dx
/2, y
+dy
/2), dx
/4, LineWidth
= 2, FillColor
= color
)
603 R
.Name
= color
+ " Circle"
605 R
.Bind(FloatCanvas
.EVT_FC_LEFT_DCLICK
, self
.RectGotHit
)
606 Canvas
.AddText("Left D-Click Fill", (x
, y
), Size
= FontSize
, Position
= "bl")
607 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
612 R
= Canvas
.AddCircle((x
+dx
/2, y
+dy
/2), dx
/4, LineWidth
= 2,FillColor
= color
)
613 R
.Name
= color
+ " Circle"
614 R
.Bind(FloatCanvas
.EVT_FC_LEFT_UP
, self
.RectGotHit
)
615 Canvas
.AddText("Left Up Fill", (x
, y
), Size
= FontSize
, Position
= "bl")
616 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
620 R
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth
= 2, FillColor
= color
)
621 R
.Name
= color
+ " Rectangle"
622 R
.Bind(FloatCanvas
.EVT_FC_MIDDLE_DOWN
, self
.RectGotHit
)
623 Canvas
.AddText("Middle Down", (x
, y
), Size
= FontSize
, Position
= "bl")
624 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
628 R
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth
= 2, FillColor
= color
)
629 R
.Name
= color
+ " Rectangle"
630 R
.Bind(FloatCanvas
.EVT_FC_MIDDLE_UP
, self
.RectGotHit
)
631 Canvas
.AddText("Middle Up", (x
, y
), Size
= FontSize
, Position
= "bl")
632 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
637 R
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth
= 2, FillColor
= color
)
638 R
.Name
= color
+ " Rectangle"
639 R
.Bind(FloatCanvas
.EVT_FC_MIDDLE_DCLICK
, self
.RectGotHit
)
640 Canvas
.AddText("Middle DoubleClick", (x
, y
), Size
= FontSize
, Position
= "bl")
641 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
645 R
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth
= 2, FillColor
= color
)
646 R
.Name
= color
+ " Rectangle"
647 R
.Bind(FloatCanvas
.EVT_FC_RIGHT_UP
, self
.RectGotHit
)
648 Canvas
.AddText("Right Up", (x
, y
), Size
= FontSize
, Position
= "bl")
649 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
653 R
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth
= 2, FillColor
= color
)
654 R
.Name
= color
+ " Rectangle"
655 R
.Bind(FloatCanvas
.EVT_FC_RIGHT_DCLICK
, self
.RectGotHit
)
656 Canvas
.AddText("Right Double Click", (x
, y
), Size
= FontSize
, Position
= "bl")
657 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
661 color
= "MEDIUM GOLDENROD"
662 R
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth
= 2, FillColor
= color
)
664 R
.Bind(FloatCanvas
.EVT_FC_RIGHT_DOWN
, self
.RectGotHitRight
)
665 R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectGotHitLeft
)
666 Canvas
.AddText("L and R Click", (x
, y
), Size
= FontSize
, Position
= "bl")
667 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
671 R
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth
= 2, FillColor
= color
)
672 R
.Name
= color
+ " Rectangle"
673 R
.Bind(FloatCanvas
.EVT_FC_ENTER_OBJECT
, self
.RectMouseOver
)
674 Canvas
.AddText("Mouse Enter", (x
, y
), Size
= FontSize
, Position
= "bl")
675 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
678 color
= "MEDIUM VIOLET RED"
679 R
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth
= 2, FillColor
= color
)
681 R
.Bind(FloatCanvas
.EVT_FC_LEAVE_OBJECT
, self
.RectMouseLeave
)
682 Canvas
.AddText("Mouse Leave", (x
, y
), Size
= FontSize
, Position
= "bl")
683 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
688 R
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth
= 2, FillColor
= color
)
690 R
.Bind(FloatCanvas
.EVT_FC_ENTER_OBJECT
, self
.RectMouseOver
)
691 R
.Bind(FloatCanvas
.EVT_FC_LEAVE_OBJECT
, self
.RectMouseLeave
)
692 Canvas
.AddText("Enter and Leave", (x
, y
), Size
= FontSize
, Position
= "bl")
693 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
697 R
= Canvas
.AddRectangle((x
, y
), (w
+12, h
), LineColor
= None, FillColor
= color
)
699 R
.Bind(FloatCanvas
.EVT_FC_ENTER_OBJECT
, self
.RectMouseOver
)
700 R
.Bind(FloatCanvas
.EVT_FC_LEAVE_OBJECT
, self
.RectMouseLeave
)
701 Canvas
.AddText("Mouse Enter&Leave", (x
, y
), Size
= FontSize
, Position
= "bl")
702 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
706 R
= Canvas
.AddRectangle((x
-12, y
), (w
+12, h
), LineColor
= None, FillColor
= color
)
708 R
.Bind(FloatCanvas
.EVT_FC_ENTER_OBJECT
, self
.RectMouseOver
)
709 R
.Bind(FloatCanvas
.EVT_FC_LEAVE_OBJECT
, self
.RectMouseLeave
)
710 Canvas
.AddText("Mouse Enter&Leave", (x
, y
), Size
= FontSize
, Position
= "bl")
711 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
715 L
= Canvas
.AddLine(( (x
, y
), (x
+10, y
+10), (x
+w
, y
+h
) ), LineWidth
= 2, LineColor
= "Red")
717 L
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectGotHitLeft
)
718 Canvas
.AddText("Left Down", (x
, y
), Size
= FontSize
, Position
= "bl")
719 Canvas
.AddText(L
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
723 Points
= N
.array(( (x
, y
), (x
, y
+2.*h
/3), (x
+w
, y
+h
), (x
+w
, y
+h
/2.), (x
+ 2.*w
/3, y
+h
/2.), (x
+ 2.*w
/3,y
) ), N
.float_
)
724 R
= Canvas
.AddPolygon(Points
, LineWidth
= 2, FillColor
= color
)
725 R
.Name
= color
+ " Polygon"
726 R
.Bind(FloatCanvas
.EVT_FC_RIGHT_DOWN
, self
.RectGotHitRight
)
727 Canvas
.AddText("RIGHT_DOWN", (x
, y
), Size
= FontSize
, Position
= "bl")
728 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
732 Points
= N
.array(( (x
, y
), (x
, y
+2.*h
/3), (x
+w
, y
+h
), (x
+w
, y
+h
/2.), (x
+ 2.*w
/3, y
+h
/2.), (x
+ 2.*w
/3,y
) ), N
.float_
)
733 R
= Canvas
.AddPointSet(Points
, Diameter
= 4, Color
= color
)
735 R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.PointSetGotHit
)
736 Canvas
.AddText("LEFT_DOWN", (x
, y
), Size
= FontSize
, Position
= "bl")
737 Canvas
.AddText(R
.Name
, (x
, y
+h
), Size
= FontSize
, Position
= "tl")
741 T
= Canvas
.AddText("Hit-able Text", (x
, y
), Size
= 15, Color
= "Red", Position
= 'tl')
742 T
.Name
= "Hit-able Text"
743 T
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectGotHitLeft
)
744 Canvas
.AddText("Left Down", (x
, y
), Size
= FontSize
, Position
= "bl")
747 T
= Canvas
.AddScaledText("Scaled Text", (x
, y
), Size
= 1./2*h
, Color
= "Pink", Position
= 'bl')
748 Canvas
.AddPointSet( (x
, y
), Diameter
= 3)
749 T
.Name
= "Scaled Text"
750 T
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectGotHitLeft
)
751 Canvas
.AddText("Left Down", (x
, y
), Size
= FontSize
, Position
= "tl")
756 #Points = N.array(( (x, y), (x, y+2.*h/3), (x+w, y+h), (x+w, y+h/2.), (x + 2.*w/3, y+h/2.), (x + 2.*w/3,y) ), N.float_)
757 R
= Canvas
.AddSquarePoint(Point
, Size
= 8, Color
= color
)
758 R
.Name
= "SquarePoint"
759 R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectGotHit
)
760 Canvas
.AddText("LEFT_DOWN", (x
, y
), Size
= FontSize
, Position
= "bl")
761 Canvas
.AddText(R
.Name
, (x
, y
), Size
= FontSize
, Position
= "tl")
764 self
.Canvas
.ZoomToBB()
766 def TestHitTestForeground(self
,event
=None):
767 wx
.GetApp().Yield(True)
769 self
.UnBindAllMouseEvents()
774 #Add a Hitable rectangle
782 R
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth
= 2, FillColor
= color
, InForeground
= False)
783 R
.Name
= color
+ "Rectangle"
785 R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectGotHit
)
786 Canvas
.AddText("Left Click Fill", (x
, y
), Position
= "bl")
787 Canvas
.AddText(R
.Name
, (x
, y
+h
), Position
= "tl")
789 ## A set of Rectangles that move together
791 ## NOTE: In a real app, it might be better to create a new
792 ## custom FloatCanvas DrawObject
794 self
.MovingRects
= []
798 R
= Canvas
.AddRectangle((x
, y
), WH
, LineWidth
= 2, FillColor
= color
, InForeground
= True)
800 R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectMoveLeft
)
801 L
= Canvas
.AddText("Left", (x
+ w
/4, y
+ h
/4), Position
= "cc", InForeground
= True)
802 self
.MovingRects
.extend( (R
,L
) )
805 R
= Canvas
.AddRectangle((x
, y
), WH
, LineWidth
= 2, FillColor
= color
, InForeground
= True)
807 R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectMoveRight
)
808 L
= Canvas
.AddText("Right", (x
+ w
/4, y
+ h
/4), Position
= "cc", InForeground
= True)
809 self
.MovingRects
.extend( (R
,L
) )
813 R
= Canvas
.AddRectangle((x
, y
), WH
, LineWidth
= 2, FillColor
= color
, InForeground
= True)
815 R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectMoveUp
)
816 L
= Canvas
.AddText("Up", (x
+ w
/4, y
+ h
/4), Position
= "cc", InForeground
= True)
817 self
.MovingRects
.extend( (R
,L
) )
821 R
= Canvas
.AddRectangle((x
, y
), WH
, LineWidth
= 2, FillColor
= color
, InForeground
= True)
823 R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectMoveDown
)
824 L
= Canvas
.AddText("Down", (x
+ w
/4, y
+ h
/4), Position
= "cc", InForeground
= True)
825 self
.MovingRects
.extend( (R
,L
) )
827 self
.Canvas
.ZoomToBB()
829 def RectMoveLeft(self
,Object
):
830 self
.MoveRects("left")
832 def RectMoveRight(self
,Object
):
833 self
.MoveRects("right")
835 def RectMoveUp(self
,Object
):
838 def RectMoveDown(self
,Object
):
839 self
.MoveRects("down")
841 def MoveRects(self
, Dir
):
842 for Object
in self
.MovingRects
:
844 if Dir
== "left": X
-= 10
845 elif Dir
== "right": X
+= 10
846 elif Dir
== "up": Y
+= 10
847 elif Dir
== "down": Y
-= 10
848 Object
.SetPoint((X
,Y
))
851 def PointSetGotHit(self
, Object
):
852 self
.Log(Object
.Name
+ "Got Hit\n")
854 def RectGotHit(self
, Object
):
855 self
.Log(Object
.Name
+ "Got Hit\n")
857 def RectGotHitRight(self
, Object
):
858 self
.Log(Object
.Name
+ "Got Hit With Right\n")
860 def RectGotHitLeft(self
, Object
):
861 self
.Log(Object
.Name
+ "Got Hit with Left\n")
863 def RectMouseOver(self
, Object
):
864 self
.Log("Mouse entered:" + Object
.Name
)
866 def RectMouseLeave(self
, Object
):
867 self
.Log("Mouse left " + Object
.Name
)
870 def TestText(self
, event
= None):
871 wx
.GetApp().Yield(True)
873 self
.BindAllMouseEvents()
881 ## Add a non-visible rectangle, just to get a Bounding Box
882 ## Text objects have a zero-size bounding box, because it changes with zoom
883 Canvas
.AddRectangle((-10,-10),
890 self
.Canvas
.AddText("Top Left",Point
,Size
= DefaultSize
,Color
= "Yellow",BackgroundColor
= "Blue", Position
= "tl")
891 self
.Canvas
.AddText("Bottom Left",Point
,Size
= DefaultSize
,Color
= "Cyan",BackgroundColor
= "Black",Position
= "bl")
892 self
.Canvas
.AddText("Top Right",Point
,Size
= DefaultSize
,Color
= "Black",BackgroundColor
= "Cyan",Position
= "tr")
893 self
.Canvas
.AddText("Bottom Right",Point
,Size
= DefaultSize
,Color
= "Blue",BackgroundColor
= "Yellow",Position
= "br")
894 Canvas
.AddPointSet((Point
), Color
= "White", Diameter
= 2)
898 Canvas
.AddPointSet((Point
), Color
= "White", Diameter
= 2)
899 self
.Canvas
.AddText("Top Center",Point
,Size
= DefaultSize
,Color
= "Black",Position
= "tc")
900 self
.Canvas
.AddText("Bottom Center",Point
,Size
= DefaultSize
,Color
= "White",Position
= "bc")
904 Canvas
.AddPointSet((Point
), Color
= "White", Diameter
= 2)
905 self
.Canvas
.AddText("Center Right",Point
,Size
= DefaultSize
,Color
= "Black",Position
= "cr")
906 self
.Canvas
.AddText("Center Left",Point
,Size
= DefaultSize
,Color
= "Black",Position
= "cl")
910 Canvas
.AddPointSet((Point
), Color
= "White", Diameter
= 2)
911 self
.Canvas
.AddText("Center Center",
912 Point
, Size
= DefaultSize
,
916 self
.Canvas
.AddText("40 Pixels", (-10,8), Size
= 40)
917 self
.Canvas
.AddText("20 Pixels", (-10,5), Size
= 20)
918 self
.Canvas
.AddText("10 Pixels", (-10,3), Size
= 10)
920 self
.Canvas
.AddText("MODERN Font", (-10, 0), Family
= wx
.MODERN
)
921 self
.Canvas
.AddText("DECORATIVE Font", (-10, -1), Family
= wx
.DECORATIVE
)
922 self
.Canvas
.AddText("ROMAN Font", (-10, -2), Family
= wx
.ROMAN
)
923 self
.Canvas
.AddText("SCRIPT Font", (-10, -3), Family
= wx
.SCRIPT
)
924 self
.Canvas
.AddText("ROMAN BOLD Font", (-10, -4), Family
= wx
.ROMAN
, Weight
=wx
.BOLD
)
925 self
.Canvas
.AddText("ROMAN ITALIC BOLD Font", (-10, -5), Family
= wx
.ROMAN
, Weight
=wx
.BOLD
, Style
=wx
.ITALIC
)
927 # NOTE: this font exists on my Linux box..who knows were else you'll find it!
928 Font
= wx
.Font(20, wx
.DEFAULT
, wx
.ITALIC
, wx
.NORMAL
, False, "helvetica")
929 self
.Canvas
.AddText("Helvetica Italic", (-10, -6), Font
= Font
)
931 self
.Canvas
.ZoomToBB()
933 def TestScaledText(self
, event
= None):
934 wx
.GetApp().Yield(True)
936 self
.BindAllMouseEvents()
942 T
= Canvas
.AddScaledText("Top Left",
946 BackgroundColor
= "Blue",
948 T
= Canvas
.AddScaledText("Bottom Left",Point
,Size
= 5,Color
= "Cyan",BackgroundColor
= "Black",Position
= "bl")
949 T
= Canvas
.AddScaledText("Top Right",Point
,Size
= 5,Color
= "Black",BackgroundColor
= "Cyan",Position
= "tr")
950 T
= Canvas
.AddScaledText("Bottom Right",Point
,Size
= 5,Color
= "Blue",BackgroundColor
= "Yellow",Position
= "br")
951 Canvas
.AddPointSet((Point
), Color
= "Red", Diameter
= 4)
956 Canvas
.AddScaledText("Top Center",Point
,Size
= 7,Color
= "Black",Position
= "tc")
957 Canvas
.AddScaledText("Bottom Center",Point
,Size
= 7,Color
= "White",Position
= "bc")
958 Canvas
.AddPointSet((Point
), Color
= "White", Diameter
= 4)
962 Canvas
.AddScaledText("Center Right",Point
,Size
= 9,Color
= "Black",Position
= "cr")
963 Canvas
.AddScaledText("Center Left",Point
,Size
= 9,Color
= "Black",Position
= "cl")
964 Canvas
.AddPointSet((Point
), Color
= "White", Diameter
= 4)
968 self
.Canvas
.AddScaledText("MODERN Font", (x
, 0), Size
= 7, Family
= wx
.MODERN
, Color
= (0,0,0))
969 self
.Canvas
.AddScaledText("DECORATIVE Font", (x
, -10), Size
= 7, Family
= wx
.DECORATIVE
, Color
= (0,0,1))
970 self
.Canvas
.AddScaledText("ROMAN Font", (x
, -20), Size
= 7, Family
= wx
.ROMAN
)
971 self
.Canvas
.AddScaledText("SCRIPT Font", (x
, -30), Size
= 7, Family
= wx
.SCRIPT
)
972 self
.Canvas
.AddScaledText("ROMAN BOLD Font", (x
, -40), Size
= 7, Family
= wx
.ROMAN
, Weight
=wx
.BOLD
)
973 self
.Canvas
.AddScaledText("ROMAN ITALIC BOLD Font", (x
, -50), Size
= 7, Family
= wx
.ROMAN
, Weight
=wx
.BOLD
, Style
=wx
.ITALIC
)
974 Canvas
.AddPointSet((x
,0), Color
= "White", Diameter
= 4)
977 # NOTE: this font exists on my OS-X.who knows were else you'll find it!
979 Font
= wx
.Font(12, wx
.DEFAULT
, wx
.ITALIC
, wx
.NORMAL
, False, "helvetica")
980 T
= self
.Canvas
.AddScaledText("Helvetica Italic", Point
, Size
= 20, Font
= Font
, Position
= 'bc')
983 Font
= wx
.Font(12, wx
.DEFAULT
, wx
.ITALIC
, wx
.NORMAL
, False, "times")
984 T
= self
.Canvas
.AddScaledText("Times Font", Point
, Size
= 8, Font
= Font
)
986 self
.Canvas
.ZoomToBB()
988 def TestScaledTextBox(self
, event
= None):
989 wx
.GetApp().Yield(True)
991 self
.UnBindAllMouseEvents()
996 Box
= Canvas
.AddScaledTextBox("A Two Line\nString",
1000 BackgroundColor
= None,
1002 LineStyle
= "Solid",
1012 InForeground
= False)
1015 Box
= Canvas
.AddScaledTextBox("A Two Line\nString",
1019 Box
= Canvas
.AddScaledTextBox("A Two Line\nString",
1022 BackgroundColor
= "Yellow",
1024 LineStyle
= "Solid",
1026 Family
= wx
.TELETYPE
,
1029 Box
= Canvas
.AddScaledTextBox("A String\nThis box is clickable",
1032 BackgroundColor
= "Yellow",
1034 LineStyle
= "Solid",
1036 Family
= wx
.TELETYPE
,
1039 Box
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.binding2
)
1041 Canvas
.AddPoint(Point
, Diameter
= 4)
1044 Box
= Canvas
.AddScaledTextBox("A Two Line\nString",
1048 BackgroundColor
= 'Red',
1050 LineStyle
= "LongDash",
1054 Family
= wx
.TELETYPE
,
1060 InForeground
= False)
1062 Box
= Canvas
.AddScaledTextBox("A Two Line\nString",
1066 BackgroundColor
= 'Red',
1068 LineStyle
= "LongDash",
1072 Family
= wx
.TELETYPE
,
1078 InForeground
= False)
1080 Canvas
.AddPoint(Point
, Diameter
= 4)
1083 Box
= Canvas
.AddScaledTextBox("A Two Line\nString",
1087 BackgroundColor
= 'Red',
1089 LineStyle
= "LongDash",
1093 Family
= wx
.TELETYPE
,
1099 InForeground
= False)
1101 Box
= Canvas
.AddScaledTextBox("A three\nLine\nString",
1105 BackgroundColor
= 'Red',
1107 LineStyle
= "LongDash",
1111 Family
= wx
.TELETYPE
,
1117 InForeground
= False)
1120 Canvas
.AddPoint(Point
, Diameter
= 4)
1122 Box
= Canvas
.AddScaledTextBox("Some Auto Wrapped Text. There is enough to do.",
1125 BackgroundColor
= 'White',
1129 Family
= wx
.TELETYPE
,
1132 Box
= Canvas
.AddScaledTextBox("Some more auto wrapped text. Wrapped to a different width.\n\nThis is another paragraph.",
1135 BackgroundColor
= 'White',
1142 Point
= N
.array((100, -20), N
.float_
)
1143 Box
= Canvas
.AddScaledTextBox("Here is even more auto wrapped text. This time the line spacing is set to 0.8. \n\nThe Padding is set to 0.",
1146 BackgroundColor
= 'White',
1154 Canvas
.AddPoint(Point
, "Red", 2)
1156 Point
= N
.array((0, -40), N
.float_
)
1157 # Point = N.array((0, 0), N.float_)
1158 for Position
in ["tl", "bl", "tr", "br"]:
1159 # for Position in ["br"]:
1160 Box
= Canvas
.AddScaledTextBox("Here is a\nfour liner\nanother line\nPosition=%s"%Position
,
1164 BackgroundColor
= None,#'LightBlue',
1166 LineColor
= "White",
1170 Position
= Position
,
1173 Canvas
.AddPoint(Point
, "Red", 4)
1175 Point
= N
.array((-20, 60), N
.float_
)
1176 Box
= Canvas
.AddScaledTextBox("Here is some\ncentered\ntext",
1180 BackgroundColor
= 'LightBlue',
1182 LineColor
= "White",
1187 Alignment
= "center",
1191 Point
= N
.array((-20, 20), N
.float_
)
1192 Box
= Canvas
.AddScaledTextBox("Here is some\nright aligned\ntext",
1196 BackgroundColor
= 'LightBlue',
1202 Alignment
= "right",
1206 Point
= N
.array((100, -60), N
.float_
)
1207 Box
= Canvas
.AddScaledTextBox("Here is some auto wrapped text. This time it is centered, rather than right aligned.\n\nThe Padding is set to 2.",
1210 BackgroundColor
= 'White',
1217 Alignment
= 'center',
1223 self
.Canvas
.ZoomToBB()
1225 def binding2(self
, event
):
1226 self
.Log("I'm the TextBox")
1228 def TestBitmap(self
, event
= None):
1229 wx
.GetApp().Yield(True)
1231 self
.UnBindAllMouseEvents()
1232 Canvas
= self
.Canvas
1235 Canvas
.AddRectangle((10, 20),
1241 bmp
= Resources
.getMagPlusBitmap()
1243 Canvas
.AddText("These are Unscaled Bitmaps:", (140, 90))
1246 BitMap
= Canvas
.AddBitmap(bmp
, Point
, Position
= "cc" )
1247 Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green")
1250 BitMap
= Canvas
.AddBitmap(bmp
, Point
, Position
= "br" )
1251 Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green")
1254 BitMap
= Canvas
.AddBitmap(bmp
, Point
, Position
= "bl" )
1255 Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green")
1258 BitMap
= Canvas
.AddBitmap(bmp
, Point
, Position
= "tr" )
1259 Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green")
1262 BitMap
= Canvas
.AddBitmap(bmp
, Point
, Position
= "tl" )
1263 Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green")
1266 BitMap
= Canvas
.AddBitmap(bmp
, Point
, Position
= "cr" )
1267 Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green")
1270 BitMap
= Canvas
.AddBitmap(bmp
, Point
, Position
= "cl" )
1271 Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green")
1274 BitMap
= Canvas
.AddBitmap(bmp
, Point
, Position
= "tc" )
1275 Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green")
1278 BitMap
= Canvas
.AddBitmap(bmp
, Point
, Position
= "bc" )
1279 Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green")
1281 Canvas
.AddScaledText("These are Scaled Bitmaps:", (220, -60), Size
= 10, Position
= "tr")
1283 BitMap
= Canvas
.AddScaledBitmap(bmp
, Point
, Height
= 50, Position
= "bc" )
1284 BitMap
= Canvas
.AddScaledBitmap(bmp
, Point
, Height
= 50, Position
= "tc" )
1285 Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green")
1288 BitMap
= Canvas
.AddScaledBitmap(Resources
.getMondrianImage(), Point
, Height
= 50)
1290 self
.Canvas
.ZoomToBB()
1292 def DrawMap(self
,event
= None):
1293 wx
.GetApp().Yield(True)
1296 self
.Canvas
.InitAll()
1297 self
.Canvas
.SetProjectionFun("FlatEarth")
1298 self
.BindAllMouseEvents()
1300 ## Test of Actual Map Data
1301 #start = time.clock()
1302 self
.Log("Loading Map from a File")
1303 wx
.GetApp().Yield(True) # so log text will get displayed now.
1304 Shorelines
= self
.Read_MapGen(os
.path
.join("data",'world.dat'),stats
= 0)
1305 #print "It took %f seconds to load %i shorelines"%(time.clock() - start,len(Shorelines) )
1306 #start = time.clock()
1307 for segment
in Shorelines
:
1308 self
.Canvas
.AddLine(segment
)
1309 #print "It took %f seconds to add %i shorelines"%(time.clock() - start,len(Shorelines) )
1310 #start = time.clock()
1311 self
.Canvas
.ZoomToBB()
1312 #print "It took %f seconds to draw %i shorelines"%(time.clock() - start,len(Shorelines) )
1316 def LineTest(self
,event
= None):
1317 wx
.GetApp().Yield(True)
1320 colors
= self
.colors
1322 ## Test of drawing lots of lines
1323 Canvas
= self
.Canvas
1325 #start = time.clock()
1329 for i
in range(2000):
1330 points
= (random
.randint(Range
[0],Range
[1]),
1331 random
.randint(Range
[0],Range
[1]),
1332 random
.randint(Range
[0],Range
[1]),
1333 random
.randint(Range
[0],Range
[1]))
1334 linepoints
.append(points
)
1335 linewidths
.append(random
.randint(1,10) )
1336 linecolors
.append(random
.randint(0,len(colors
)-1) )
1337 for (points
,color
,width
) in zip(linepoints
,linecolors
,linewidths
):
1338 Canvas
.AddLine((points
[0:2],points
[2:4]), LineWidth
= width
, LineColor
= colors
[color
])
1339 #print "It took %f seconds to add %i lines"%(time.clock() - start,len(linepoints) )
1340 #start = time.clock()
1342 #print "It took %f seconds to draw %i lines"%(time.clock() - start,len(linepoints) )
1344 def ArrowLineTest(self
,event
= None):
1345 wx
.GetApp().Yield(True)
1346 Canvas
= self
.Canvas
1351 colors
= self
.colors
1356 for j
in range(random
.randint(2,10)):
1357 point
= (random
.randint(Range
[0],Range
[1]),random
.randint(Range
[0],Range
[1]))
1358 points
.append(point
)
1359 lw
= random
.randint(1,4)
1360 cf
= random
.randint(0,len(colors
)-1)
1361 cl
= random
.randint(0,len(colors
)-1)
1362 al
= random
.randint(8,20)
1363 aa
= random
.randint(20,90)
1364 Canvas
.AddArrowLine(points
,
1366 LineColor
= colors
[cl
],
1368 ArrowHeadAngle
= aa
)
1372 def SpeedTest(self
,event
=None):
1373 wx
.GetApp().Yield(True)
1374 BigRange
= (-1000,1000)
1375 colors
= self
.colors
1377 self
.UnBindAllMouseEvents()
1378 Canvas
= self
.Canvas
1384 for i
in range(1000):
1385 Point
= (random
.uniform(BigRange
[0],BigRange
[1]),random
.uniform(BigRange
[0],BigRange
[1]))
1386 coords
.append( (Point
) )
1387 print "Drawing the Points"
1388 start
= time
.clock()
1389 for Point
in coords
:
1390 Canvas
.AddPoint(Point
, Diameter
= 4)
1391 print "It took %s seconds to add the points"%(time
.clock() - start
)
1394 def PropertiesChangeTest(self
,event
=None):
1395 wx
.GetApp().Yield(True)
1398 colors
= self
.colors
1400 self
.UnBindAllMouseEvents()
1401 Canvas
= self
.Canvas
1405 self
.ColorObjectsAll
= []
1406 self
.ColorObjectsLine
= []
1407 self
.ColorObjectsColor
= []
1408 self
.ColorObjectsText
= []
1409 ##One of each object:
1411 Point
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
1412 lw
= random
.randint(1,5)
1413 cf
= random
.randint(0,len(colors
)-1)
1414 wh
= ( random
.randint(1,5), random
.randint(1,5) )
1415 self
.Rectangle
= Canvas
.AddRectangle(Point
, wh
, LineWidth
= lw
, FillColor
= colors
[cf
])
1416 self
.ColorObjectsAll
.append(self
.Rectangle
)
1419 Point
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
1420 lw
= random
.randint(1,5)
1421 cf
= random
.randint(0,len(colors
)-1)
1422 wh
= ( random
.randint(1,5), random
.randint(1,5) )
1423 self
.Ellipse
= Canvas
.AddEllipse(Point
, wh
, LineWidth
= lw
, FillColor
= colors
[cf
])
1424 self
.ColorObjectsAll
.append(self
.Ellipse
)
1427 xy
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
1428 D
= random
.randint(1,50)
1429 lw
= random
.randint(1,5)
1430 cf
= random
.randint(0,len(colors
)-1)
1431 cl
= random
.randint(0,len(colors
)-1)
1432 self
.ColorObjectsColor
.append(Canvas
.AddPoint(xy
, colors
[cf
], D
))
1435 Point
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
1436 D
= random
.randint(1,5)
1437 lw
= random
.randint(1,5)
1438 cf
= random
.randint(0,len(colors
)-1)
1439 cl
= random
.randint(0,len(colors
)-1)
1440 self
.Circle
= Canvas
.AddCircle(Point
, D
, LineWidth
= lw
, LineColor
= colors
[cl
], FillColor
= colors
[cf
])
1441 self
.ColorObjectsAll
.append(self
.Circle
)
1445 for j
in range(random
.randint(2,10)):
1446 point
= (random
.randint(Range
[0],Range
[1]),random
.randint(Range
[0],Range
[1]))
1447 points
.append(point
)
1448 lw
= random
.randint(1,10)
1449 cf
= random
.randint(0,len(colors
)-1)
1450 cl
= random
.randint(0,len(colors
)-1)
1451 self
.ColorObjectsLine
.append(Canvas
.AddLine(points
, LineWidth
= lw
, LineColor
= colors
[cl
]))
1455 ## for j in range(random.randint(2,6)):
1456 ## point = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
1457 ## points.append(point)
1458 points
= RandomArray
.uniform(Range
[0],Range
[1],(6,2))
1459 lw
= random
.randint(1,6)
1460 cf
= random
.randint(0,len(colors
)-1)
1461 cl
= random
.randint(0,len(colors
)-1)
1462 self
.ColorObjectsAll
.append(Canvas
.AddPolygon(points
,
1464 LineColor
= colors
[cl
],
1465 FillColor
= colors
[cf
],
1466 FillStyle
= 'Solid'))
1469 points
= RandomArray
.uniform(Range
[0],Range
[1],(100,2))
1470 cf
= random
.randint(0,len(colors
)-1)
1471 D
= random
.randint(1,4)
1472 self
.PointSet
= Canvas
.AddPointSet(points
, Color
= colors
[cf
], Diameter
= D
)
1473 self
.ColorObjectsColor
.append(self
.PointSet
)
1476 point
= RandomArray
.uniform(Range
[0],Range
[1],(2,))
1477 cf
= random
.randint(0,len(colors
)-1)
1478 D
= random
.randint(1,4)
1479 self
.Point
= Canvas
.AddPoint(point
, Color
= colors
[cf
], Diameter
= D
)
1480 self
.ColorObjectsColor
.append(self
.Point
)
1483 String
= "Unscaled text"
1484 ts
= random
.randint(10,40)
1485 cf
= random
.randint(0,len(colors
)-1)
1486 Point
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
1487 self
.ColorObjectsText
.append(Canvas
.AddText(String
, Point
, Size
= ts
, Color
= colors
[cf
], Position
= "cc"))
1490 String
= "Scaled text"
1491 ts
= random
.random()*3 + 0.2
1492 cf
= random
.randint(0,len(colors
)-1)
1493 Point
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
1494 self
.ColorObjectsText
.append(Canvas
.AddScaledText(String
, Point
, Size
= ts
, Color
= colors
[cf
], Position
= "cc"))
1497 Button
= Canvas
.AddRectangle((-10, -12), (20, 3), LineStyle
= None, FillColor
= "Red")
1498 Canvas
.AddScaledText("Click Here To Change Properties",
1504 Button
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.ChangeProperties
)
1508 def ChangeProperties(self
, Object
= None):
1509 colors
= self
.colors
1512 for Object
in self
.ColorObjectsAll
:
1514 Object
.SetFillColor(colors
[random
.randint(0,len(colors
)-1)])
1515 Object
.SetLineColor(colors
[random
.randint(0,len(colors
)-1)])
1516 Object
.SetLineWidth(random
.randint(1,7))
1517 Object
.SetLineStyle(FloatCanvas
.DrawObject
.LineStyleList
.keys()[random
.randint(0,5)])
1518 for Object
in self
.ColorObjectsLine
:
1519 Object
.SetLineColor(colors
[random
.randint(0,len(colors
)-1)])
1520 Object
.SetLineWidth(random
.randint(1,7))
1521 Object
.SetLineStyle(FloatCanvas
.DrawObject
.LineStyleList
.keys()[random
.randint(0,5)])
1522 for Object
in self
.ColorObjectsColor
:
1523 Object
.SetColor(colors
[random
.randint(0,len(colors
)-1)])
1524 for Object
in self
.ColorObjectsText
:
1525 Object
.SetColor(colors
[random
.randint(0,len(colors
)-1)])
1526 Object
.SetBackgroundColor(colors
[random
.randint(0,len(colors
)-1)])
1527 self
.Circle
.SetDiameter(random
.randint(1,10))
1528 self
.PointSet
.SetDiameter(random
.randint(1,8))
1529 self
.Point
.SetDiameter(random
.randint(1,8))
1530 for Object
in (self
.Rectangle
, self
.Ellipse
):
1531 Point
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
1532 wh
= ( random
.randint(1,5), random
.randint(1,5) )
1533 Object
.SetShape(Point
, wh
)
1534 self
.Canvas
.Draw(Force
= True)
1536 def ArrowTest(self
,event
=None):
1537 wx
.GetApp().Yield(True)
1538 self
.UnBindAllMouseEvents()
1539 Canvas
= self
.Canvas
1542 Canvas
.MinScale
= 15
1543 Canvas
.MaxScale
= 30
1545 # put in a rectangle to get a bounding box
1546 Canvas
.AddRectangle((0,0), (20,20), LineColor
= None)
1549 Canvas
.AddArrow((10,10),Length
= 40, Direction
= 0)
1550 Canvas
.AddArrow((10,10),Length
= 50, Direction
= 45 ,LineWidth
= 2, LineColor
= "Black", ArrowHeadAngle
= 20)
1551 Canvas
.AddArrow((10,10),Length
= 60, Direction
= 90 ,LineWidth
= 3, LineColor
= "Red", ArrowHeadAngle
= 30)
1552 Canvas
.AddArrow((10,10),Length
= 70, Direction
= 135,LineWidth
= 4, LineColor
= "Red", ArrowHeadAngle
= 40)
1553 Canvas
.AddArrow((10,10),Length
= 80, Direction
= 180,LineWidth
= 5, LineColor
= "Blue", ArrowHeadAngle
= 50)
1554 Canvas
.AddArrow((10,10),Length
= 90, Direction
= 225,LineWidth
= 4, LineColor
= "Blue", ArrowHeadAngle
= 60)
1555 Canvas
.AddArrow((10,10),Length
= 100,Direction
= 270,LineWidth
= 3, LineColor
= "Green", ArrowHeadAngle
= 70)
1556 Canvas
.AddArrow((10,10),Length
= 110,Direction
= 315,LineWidth
= 2, LineColor
= "Green", ArrowHeadAngle
= 90 )
1558 Canvas
.AddText("Clickable Arrow", (4,18), Position
= "bc")
1559 Arrow
= Canvas
.AddArrow((4,18), 80, Direction
= 90 ,LineWidth
= 3, LineColor
= "Red", ArrowHeadAngle
= 30)
1560 Arrow
.HitLineWidth
= 6
1561 Arrow
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.ArrowClicked
)
1563 Canvas
.AddText("Changable Arrow: try clicking it", (16,4), Position
= "tc")
1564 self
.RotArrow
= Canvas
.AddArrow((16,4), 80, Direction
= 0 ,LineWidth
= 3, LineColor
= "Green", ArrowHeadAngle
= 30)
1565 self
.RotArrow
.HitLineWidth
= 6
1566 self
.RotArrow
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RotateArrow
)
1570 def ArrowClicked(self
,event
):
1571 self
.Log("The Arrow was Clicked")
1573 def RotateArrow(self
,event
):
1574 ##print "The Changeable Arrow was Clicked"
1575 ## You can do them either one at a time, or both at once
1576 ## Doing them both at once prevents the arrow points from being calculated twice
1577 #self.RotArrow.SetDirection(self.RotArrow.Direction + random.uniform(-90,90))
1578 #self.RotArrow.SetLength(self.RotArrow.Length + random.randint(-20,20))
1579 self
.RotArrow
.SetLengthDirection(self
.RotArrow
.Length
+ random
.randint(-20,20),
1580 self
.RotArrow
.Direction
+ random
.uniform(-90,90) )
1582 self
.Canvas
.Draw(Force
= True)
1584 def HideTest(self
, event
=None):
1585 wx
.GetApp().Yield(True)
1587 self
.UnBindAllMouseEvents()
1588 Canvas
= self
.Canvas
1593 # Create a couple random Polygons
1596 point
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
1597 points
.append(point
)
1598 Poly
= Canvas
.AddPolygon(points
,
1600 LineColor
= "Black",
1601 FillColor
= "LightBlue",
1602 FillStyle
= 'Solid')
1606 point
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
1607 points
.append(point
)
1608 Poly2
= Canvas
.AddPolygon(points
,
1610 LineColor
= "Black",
1611 FillColor
= "Purple",
1612 FillStyle
= 'Solid',
1613 InForeground
= True)
1615 HideButton
= Canvas
.AddScaledTextBox("Click To Hide\nBackground Polygon",
1618 BackgroundColor
="Red",
1623 HideButton
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.HidePoly
)
1624 HideButton
.HidePoly
= Poly
1626 HideButton2
= Canvas
.AddScaledTextBox("Click To Hide\nForeground Polygon",
1629 BackgroundColor
="Red",
1634 # Put a reference to the Polygon in the Button object
1635 HideButton2
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.HidePoly
)
1636 HideButton2
.HidePoly
= Poly2
1641 def HidePoly(self
, Button
):
1642 Poly
= Button
.HidePoly
1645 Poly
.Visible
= False
1646 Button
.SetText(Button
.String
.replace("Hide","Show"))
1649 Button
.SetText(Button
.String
.replace("Show", "Hide"))
1650 self
.Canvas
.Draw(True)
1653 def TempTest(self
, event
= None):
1656 This is the start of a poly editor test, but it's not complete
1657 so you can only run it through a command line flag:
1659 python FloatCanvasDemo.py --temp
1663 wx
.GetApp().Yield(True)
1665 self
.UnBindAllMouseEvents()
1666 Canvas
= self
.Canvas
1671 # Create a random Polygon
1674 point
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1]))
1675 points
.append(point
)
1676 Poly
= Canvas
.AddPolygon(points
,
1678 LineColor
= "Black",
1679 FillColor
= "LightBlue",
1680 FillStyle
= 'Solid')
1682 Poly
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.SelectPoly
)
1684 self
.SelectedPoly
= None
1685 self
.SelectPoints
= []
1686 self
.SelectedPoint
= None
1690 def SelectPoly(self
, Object
):
1691 Canvas
= self
.Canvas
1692 if Object
is self
.SelectedPoly
:
1695 #fixme: Do something to unselect the old one
1696 self
.SelectedPoly
= Object
1697 Canvas
.RemoveObjects(self
.SelectPoints
)
1698 self
.SelectPoints
= []
1699 # Draw points on the Vertices of the Selected Poly:
1700 for i
, point
in enumerate(Object
.Points
):
1701 P
= Canvas
.AddPointSet(point
, Diameter
= 6, Color
= "Red")
1703 P
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.SelectPointHit
)
1704 self
.SelectPoints
.append(P
)
1708 def SelectPointHit(self
, Point
):
1709 self
.Log("Point Num: %i Hit"%Point
.VerticeNum
)
1710 self
.SelectedPoint
= Point
1712 def Read_MapGen(self
, filename
, stats
= 0,AllLines
=0):
1714 This function reads a MapGen Format file, and
1715 returns a list of NumPy arrays with the line segments in them.
1717 Each NumPy array in the list is an NX2 array of Python Floats.
1719 The demo should have come with a file, "world.dat" that is the
1720 shorelines of the whole world, in MapGen format.
1724 file = open(filename
,'rt')
1725 data
= file.readlines()
1726 data
= map(string
.strip
,data
)
1732 if line
== "# -b": #New segment beginning
1733 if segment
: Shorelines
.append(N
.array(segment
))
1736 segment
.append(map(float,string
.split(line
)))
1737 if segment
: Shorelines
.append(N
.array(segment
))
1740 NumSegments
= len(Shorelines
)
1742 for segment
in Shorelines
:
1743 NumPoints
= NumPoints
+ len(segment
)
1744 AvgPoints
= NumPoints
/ NumSegments
1745 print "Number of Segments: ", NumSegments
1746 print "Average Number of Points per segment: ",AvgPoints
1749 for segment
in Shorelines
:
1750 Lines
.append(segment
[0])
1751 for point
in segment
[1:-1]:
1754 Lines
.append(segment
[-1])
1760 #---------------------------------------------------------------------------
1762 if __name__
== "__main__":
1764 # running stand alone, Use wxversion:
1766 # wxversion.select("2.6")
1767 # wxversion.select("2.8")
1773 optlist
, args
= getopt
.getopt(sys
.argv
[1:],'l',["all",
1790 raise ImportError(errorText
)
1791 StartUpDemo
= "all" # the default
1793 StartUpDemo
= optlist
[0][0][2:]
1796 class DemoApp(wx
.App
):
1800 Under the Draw menu, there are three options:
1802 *Draw Test: will put up a picture of a bunch of randomly generated
1803 objects, of each kind supported.
1805 *Draw Map: will draw a map of the world. Be patient, it is a big map,
1806 with a lot of data, and will take a while to load and draw (about 10 sec
1807 on my 450Mhz PIII). Redraws take about 2 sec. This demonstrates how the
1808 performance is not very good for large drawings.
1810 *Clear: Clears the Canvas.
1812 Once you have a picture drawn, you can zoom in and out and move about
1813 the picture. There is a tool bar with three tools that can be
1816 The magnifying glass with the plus is the zoom in tool. Once selected,
1817 if you click the image, it will zoom in, centered on where you
1818 clicked. If you click and drag the mouse, you will get a rubber band
1819 box, and the image will zoom to fit that box when you release it.
1821 The magnifying glass with the minus is the zoom out tool. Once selected,
1822 if you click the image, it will zoom out, centered on where you
1823 clicked. (note that this takes a while when you are looking at the map,
1824 as it has a LOT of lines to be drawn. The image is double buffered, so
1825 you don't see the drawing in progress)
1827 The hand is the move tool. Once selected, if you click and drag on the
1828 image, it will move so that the part you clicked on ends up where you
1829 release the mouse. Nothing is changed while you are dragging. The
1830 drawing is too slow for that.
1832 I'd like the cursor to change as you change tools, but the stock
1833 wxCursors didn't include anything I liked, so I stuck with the
1834 pointer. Please let me know if you have any nice cursor images for me to
1838 Any bugs, comments, feedback, questions, and especially code are welcome:
1842 Chris.Barker@noaa.gov
1846 def __init__(self
, *args
, **kwargs
):
1847 wx
.App
.__init
__(self
, *args
, **kwargs
)
1850 wx
.InitAllImageHandlers()
1851 DrawFrame
= BuildDrawFrame()
1852 frame
= DrawFrame(None, -1, "FloatCanvas Demo App",wx
.DefaultPosition
,(700,700))
1854 self
.SetTopWindow(frame
)
1857 ## check to see if the demo is set to start in a particular mode.
1858 ## fixme: should this be in a dict instead?
1859 if StartUpDemo
== "text":
1861 elif StartUpDemo
== "stext":
1862 frame
.TestScaledText()
1863 elif StartUpDemo
== "stextbox":
1864 frame
.TestScaledTextBox()
1865 elif StartUpDemo
== "bitmap":
1867 elif StartUpDemo
== "all":
1869 elif StartUpDemo
== "map":
1871 elif StartUpDemo
== "hit":
1873 elif StartUpDemo
== "hitf":
1874 frame
.TestHitTestForeground()
1875 elif StartUpDemo
== "animate":
1876 frame
.TestAnimation()
1877 elif StartUpDemo
== "speed":
1879 elif StartUpDemo
== "temp":
1881 elif StartUpDemo
== "props":
1882 frame
.PropertiesChangeTest()
1883 elif StartUpDemo
== "arrow":
1885 elif StartUpDemo
== "arrowline":
1886 frame
.ArrowLineTest()
1887 elif StartUpDemo
== "hide":
1892 app
= DemoApp(False)# put in True if you want output to go to it's own window.
1896 # It's not running stand-alone, set up for wxPython demo.
1897 # don't neeed wxversion here.
1900 ## TestPanel and runTest used for integration into wxPython Demo
1901 class TestPanel(wx
.Panel
):
1902 def __init__(self
, parent
, log
):
1904 wx
.Panel
.__init
__(self
, parent
, -1)
1906 from wx
.lib
.floatcanvas
.ScreenShot
import getScreenShotBitmap
1908 note1
= wx
.StaticText(self
, -1, errorText
)
1909 note2
= wx
.StaticText(self
, -1, "This is what the FloatCanvas can look like:")
1910 S
= wx
.BoxSizer(wx
.VERTICAL
)
1912 S
.Add(note1
, 0, wx
.ALIGN_CENTER
)
1913 S
.Add(note2
, 0, wx
.ALIGN_CENTER | wx
.BOTTOM
, 4)
1914 S
.Add(wx
.StaticBitmap(self
,-1,getScreenShotBitmap()),0,wx
.ALIGN_CENTER
)
1920 ## TestPanel and runTest used for integration into wxPython Demo
1921 class TestPanel(wx
.Panel
):
1922 def __init__(self
, parent
, log
):
1924 wx
.Panel
.__init
__(self
, parent
, -1)
1925 note1
= wx
.StaticText(self
, -1, "The FloatCanvas Demo needs")
1926 note2
= wx
.StaticText(self
, -1, "a separate frame")
1927 b
= wx
.Button(self
, -1, "Open Demo Frame Now")
1928 b
.Bind(wx
.EVT_BUTTON
, self
.OnButton
)
1930 S
= wx
.BoxSizer(wx
.VERTICAL
)
1932 S
.Add(note1
, 0, wx
.ALIGN_CENTER
)
1933 S
.Add(note2
, 0, wx
.ALIGN_CENTER | wx
.BOTTOM
, 5)
1934 S
.Add(b
, 0, wx
.ALIGN_CENTER | wx
.ALL
, 5)
1939 def OnButton(self
, evt
):
1940 DrawFrame
= BuildDrawFrame()
1941 frame
= DrawFrame(None, -1, "FloatCanvas Drawing Window",wx
.DefaultPosition
,(500,500))
1943 #win = wx.lib.plot.TestFrame(self, -1, "PlotCanvas Demo")
1947 def runTest(frame
, nb
, log
):
1948 win
= TestPanel(nb
, log
)
1951 # import to get the doc
1952 from wx
.lib
import floatcanvas
1953 overview
= floatcanvas
.__doc
__