crear objetos wx dinamicos

Oswaldo Hernández listas en soft-com.es
Mie Mar 5 12:34:31 CET 2008


Josu Rodriguez escribió:
> Hola a todos,
> 
> estaba teniendo un problema con la generacion de objetos dinamicos.
> Me gustaria, por ejemplo, crear una serie de wx.StaticText los cuales se
> generen de forma automatica dependiendo de los ficheros que hay en un
> directorio y añadirles un evento para que ejecuten el fichero serlecionado,
> pero al llamarse de la misma manera el resultado es siempre el del ultimo
> objeto creado. ¿Se puede hacer de algun modo? ¿Estaria bien mi forma de
> trabajar, o abria que plantearlo de otra manera?
> el codigo es el siguiente:
> ...
> ...
>         pnl = fpb.FoldPanelBar(self.pn767c, wx.ID_ANY, wx.DefaultPosition,
> wx.Size(350, 1000),
>                        fpb.FPB_DEFAULT_STYLE | fpb.FPB_VERTICAL)
>         dir_tools=dir+'\\tools'
>         listado=os.listdir(dir_tools)
>         directorios=[f for f in listado
>             if os.path.isdir(os.path.join(dir_tools, f))]
>         if directorios:
>             for f in directorios:
>                 item = pnl.AddFoldPanel(f, collapsed=True)
>                 for datas1 in os.listdir(dir_tools+'\\'+f):
>                     if os.path.isfile(os.path.join(dir_tools+'\\'+f,datas1))
> :
>                         (shortname, extension) = os.path.splitext
> (str(datas1))
>                         self.prueba1=wx.StaticText(item, wx.ID_ANY,
> "..."+str(datas1))
>                         pnl.AddFoldPanelWindow(item, self.prueba1)
>                         self.prueba1.Bind(wx.EVT_LEFT_DOWN,self.prueba)
>                      pnl.AddFoldPanelSeparator(item)
>         else:
>             print 'default'
> 
>         item = pnl.AddFoldPanel("Utiles", collapsed=True)
>         pnl.AddFoldPanelSeparator(item)
>         pathname = os.getcwd()+"\\tools <file://tools/>"
> ....
> ....
> 
> def prueba(self,event):
>         print "Ejecutando :",self.prueba1.GetLabel()
>         event.Skip()
> 
> Un saludo y gracias
> 

De la forma que lo haces en self.prueba1 siempre tendras el ultimo de los controles creados. Si 
realmente necesitas tener todas la referencias guardadas puedes cargarlas en una lista.

Independientemente de que las hayas guardado o no, en el evento necesitas saber a cual de los 
controles corresponde, eso lo puedes obtener con GetEventObject(), revisa la documentación.

Saludos,

-- 
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
PD:
Antes de imprimir este mensaje, asegúrese de que es necesario.
El medio ambiente está en nuestra mano.
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es