nadili wrote:
> Hi,
>  
> I’m still a newbie in python (and wxpython),
> and I’m trying to create an application that basically consists on loading a
> main frame, and creating a child frame inside it (using MDI) to work with an
> image. What I need to do is to draw points in this image (for which I’m using
> floatcanvas) and store its coordinates. 
> The problem I’m having is that when I draw the
> point it only shows up if I hit the “Zoom to Fit” button that comes with
> NavCanvas, and I would like for it to appear on the screen automatically. 
> Another thing I wanted to do is to be able to
> erase some specific point after I have drawn it, I’m not sure how would be the
> best way to do it, so I would appreciate any suggestions. 
>  
> I’m attaching the code below, thanks in
> advance. 
> Nadili L. Ribeiro
> 
> import wx
> import os
> from floatcanvas import NavCanvas, FloatCanvas
> 
> class Frame(wx.MDIParentFrame):
>     def __init__(self):
> 
>         wx.MDIParentFrame.__init__(self, None, -1, "Main Frame", 
> size=(600,400))
>         self.statusbar = self.CreateStatusBar()
>         menu = wx.Menu()
>         menu.Append(5000, "&New Picture")
>         menubar = wx.MenuBar()
>         menubar.Append(menu, "&File")
>         self.SetMenuBar(menubar)
>         self.Bind(wx.EVT_MENU, self.OnNewPicture, id=5000)
>      
> 
> 
>     def OnNewPicture(self, evt):
>         
>         """creates child frame"""
>         self.ChildFrame = wx.MDIChildFrame(self, -1, "Child Frame")
>         
> 
>         """create canvas"""
>         NC = NavCanvas.NavCanvas(self.ChildFrame,-1,
>                                  size = (5000,5000),
>                                  ProjectionFun = None,
>                                  Debug = 0,
>                                  BackgroundColor = "White")
>         self.Canvas = NC.Canvas
>         
>         """load image"""
>         image = wx.Image("orion.jpg")
>         self.temp = image.ConvertToBitmap()
>         self.Canvas.AddScaledBitmap(self.temp, (0,0), Height = 
> image.GetSize()[1], Position='tl')
>         self.Canvas.ZoomToBB()
>         self.Show()
>     
>     
> class App(wx.App):
>     
> 
>     def OnInit(self):
>             
>         """Load Frame"""
>         self.frame = Frame()
>         self.frame.Show()
>         self.Bind(wx.EVT_RIGHT_DOWN, self.OnDrawDot)
>         self.SetTopWindow(self.frame)
>         return (True)
>     
>     def OnDrawDot(self, evt):
>         
>         mpos = evt.GetPosition()
>         mposcanvas = self.frame.Canvas.PixelToWorld(mpos)
>         self.frame.statusbar.SetStatusText("Pos: %s" %str(mposcanvas))


string formatting will take care of type, so you don't need the str:

          self.frame.statusbar.SetStatusText("Pos: %s" % (mposcanvas))

>         self.frame.Canvas.AddPoint(mposcanvas, Diameter=9, Color = "Red")
 >         self.frame.Show()

I think this is what you need:

          self.Canvas.Draw(True)

Not sure if you will still need the .Show()

>         
> 
> def main():
>     app = App()
>     app.MainLoop()
> 
> if __name__ == '__main__':
>     
>     main()

Carl K
_______________________________________________
FloatCanvas mailing list
[email protected]
http://mail.mithis.com/cgi-bin/mailman/listinfo/floatcanvas

Reply via email to