[eside-ghost] wxpython + wxogl para pintar una especie de mapa o diagrama

Arkaitz arkaitzj en gmail.com
Lun Oct 16 17:37:40 CEST 2006


Aupa,
Ando con wxpython y wxOGL, y aunque estoy empezando estoy mas perdido
que un pulpo en un garaje, porque no me aclaro demasiado con las
jerarquias entre contenedores y demas.
Ahora mismo consigo mostrar ShapeRectangles donde yo quiero antes de
lanzar el MainLoop, pero despues necesito meter nuevos y borrar
antiguos, pues se refresca cada x segundos, pues no acabo de ver a que
tengo que hacer show o showAll o algo de eso.
Estoy usando esto:
class AppFrame(wx.Frame):
        def __init__(self):
                room = Room()
                wx.Frame.__init__( self,
                                None, -1, "Demo",
                                size=(room.getY(),room.getX()),
                                style=wx.DEFAULT_FRAME_STYLE )
                sizer = wx.BoxSizer( wx.VERTICAL )
                print "Room is "+str(room.getY())+","+str(room.getX())
                # put stuff into sizer
                self.shapeList= []
                self.canvas = ogl.ShapeCanvas( self )
                sizer.Add( self.canvas, 1, wx.GROW )

                self.canvas.SetBackgroundColour( "LIGHT BLUE" ) #

                self.diagram = ogl.Diagram()
                self.canvas.SetDiagram( self.diagram )
                self.diagram.SetCanvas( self.canvas )

                # apply sizer
                self.SetSizer(sizer)
                self.SetAutoLayout(1)
                self.Show(1)

        def addUbiObject(self,name,X,Y):
                shape = ogl.RectangleShape(100,25)
                shape.SetY(X*modifier)
                shape.SetX(Y*modifier)
                shape.AddText(name)
                self.shapeList.append(shape)
                self.canvas.AddShape(shape)
                shape.Show(True)


app = wx.PySimpleApp()
ogl.OGLInitialize()
frame = AppFrame()
reloader = Reloader(frame)
frame.addUbiObject("Prueba",4.5,6)
app.MainLoop()

reloader.abort()
app.Destroy()

El reloader este es un thread aparte que se encargaria de ir
refrescando,porque parece que una vez llamado el MainLoop la
aplicacion solo atiende a eventos.
Una vez lanzado el MainLoop hago addUbiObject() y tal pero no aparece
nada en la pantalla, y he intentado borrar con shape.Show(False) y
shape.RemoveFromCanvas(self.canvas) y alguna cosa mas, pero nada.
Alguien sabe algo de esto?
Un saludo
-- 
Arkaitz


Más información sobre la lista de distribución eside-ghost