Foros del Web » Programando para Internet » Python »

Capturar Valor de un textCtrl dinamicamente creado

Estas en el tema de Capturar Valor de un textCtrl dinamicamente creado en el foro de Python en Foros del Web. Hola amigos de Foro: Estoy desarrollando una aplicacion en la que al presionar un boton según una caja de texto antes llenada, se crean controles ...
  #1 (permalink)  
Antiguo 28/09/2009, 18:19
 
Fecha de Ingreso: septiembre-2009
Mensajes: 2
Antigüedad: 15 años, 2 meses
Puntos: 0
Capturar Valor de un textCtrl dinamicamente creado

Hola amigos de Foro:

Estoy desarrollando una aplicacion en la que al presionar un boton según una caja de texto antes llenada, se crean controles dinamicamente mediante un ciclo for. Los objetos (controles) se crean correctamente. Mi problema es al intentar capturar los datos contenidos en las cajas de texto que se crean dinamicamente (que son parte de aquellos objetos que mencione antes). debido a que el unico control que lee es el ultimo creado y no he podido obtenerlos por el ID del control. Mediante El metodo onGuardarNombre, se capturan los datos y los guarda en una lista pero dichos datos son solo del ultimo objeto creado y no he podido hacer que me obtenga valores de otros objetos anterioremente creados. El Codigo es el siguiente:

Código python:
Ver original
  1. def onClickCrearTabla(self,evt):
  2.         #listas
  3.         global listxt
  4.         global listlon
  5.         global listtipo
  6.         global listpredet
  7.         global listcotej
  8.         global listatrib
  9.         global listnull
  10.         global listinx
  11.         global listaich
  12.         global listcomm
  13.         global cadena
  14.        
  15.         #Evento en donde se crea la TABLA
  16.         wx.MessageBox(str(self.listxt.index(1)),"OK",style=wx.OK)
  17.        
  18.     def onGuardarNombre(self,evt):
  19.         global listxt
  20.         global cadena
  21.        
  22.         self.txtinsert.Id=wx.GetCurrentId()
  23.         cadena=str(self.txtinsert.GetValue())
  24.         wx.MessageBox(cadena,"OK",style=wx.OK)
  25.  
  26.         if not cadena=='':
  27.             self.listxt.append(cadena)
  28.            
  29.     def onClickCrearCampo(self,evt):
  30.         #GLOBALES
  31.         #Generales
  32.         global srv
  33.         global nomu
  34.         global passu
  35.         global tipobd
  36.         global conexion
  37.         global oper
  38.         global dbtmp
  39.         global tabtmp
  40.         global vistas
  41.         global paneltab
  42.         #listas Declaradas
  43.         global listxt
  44.         global listlon
  45.         global listtipo
  46.         global listpredet
  47.         global listcotej
  48.         global listatrib
  49.         global listnull
  50.         global listinx
  51.         global listaich
  52.         global listcomm
  53.         #listas Instanciadas
  54.         self.listxt=[]
  55.         self.listlon=[]
  56.         self.listtipo=[]
  57.         self.listpredet=[]
  58.         self.listcotej=[]
  59.         self.listatrib=[]
  60.         self.listnull=[]
  61.         self.listinx=[]
  62.         self.listaich=[]
  63.         self.listcomm=[]
  64.        
  65.         #textnom=self.listxt.index(2)
  66.         valorcmp=int(self.txtcampos.GetValue())
  67.         valorh=200
  68.         tipodedatos=['INT','VARCHAR','TEXT','DATE','TINYINT','MEDIUMINT','SMALLINT','INT','BIGINT','-','DECIMAL','FLOAT','DOUBLE','REAL','-','BIT','BOOL','SERIAL','DATE','DATETIME','TIMESTAMP','TIME','YEAR','-','CHAR','VARCHAR','-','TINYTEXT','TEXT','MEDIUMTEXT','LONGTEXT','-','BINARY','VARBINARY','-','TINYBLOB','MEDIUMBLOB','BLOB','LONGBLOB','-','ENUM','SET','GEOMETRY','POINT','LINESTRING','POLYGON','MULTIPOINT','MULTILINESTRING','MULTIPOLYGON','GEOMETRYCOLLECTION']
  69.         predet=['None','Como fuera definido','NULL','CURRENT_TIMESTAMP']
  70.         atrib=['BINARY','UNSIGNED','UNSIGNED ZEROFILL','on update CURRENT_TIMESTAMP']
  71.         indexes=['PRIMARY','UNIQUE','INDEX','FULLTEXT']
  72.         separacion=30
  73.         ##Encabezado
  74.         tablalblmk1=wx.StaticText(paneltab,-1,"Nombre",pos=(10,180),size=(70,-1))
  75.         tablalblmk2=wx.StaticText(paneltab,-1,"Tipo",pos=(115,180),size=(70,-1))
  76.         tablalblmk3=wx.StaticText(paneltab,-1,"Longitud",pos=(220,180),size=(80,-1))
  77.         tablalblmk4=wx.StaticText(paneltab,-1,"Predeterminado",pos=(320,180),size=(150,-1))
  78.         tablalblmk5=wx.StaticText(paneltab,-1,"Cotejamiento",pos=(440,180),size=(130,-1))
  79.         tablalblmk6=wx.StaticText(paneltab,-1,"Atributos",pos=(560,180),size=(100,-1))
  80.         tablalblmk7=wx.StaticText(paneltab,-1,"Nulo",pos=(670,180),size=(50,-1))
  81.         tablalblmk8=wx.StaticText(paneltab,-1,"Indice",pos=(750,180),size=(70,-1))
  82.         tablalblmk9=wx.StaticText(paneltab,-1,"A_I",pos=(855,180),size=(20,-1))
  83.         tablalblmk10=wx.StaticText(paneltab,-1,"Comentarios",pos=(890,180),size=(100,-1))
  84.         ###################################################################################
  85.  
  86.         for i in range(valorcmp):
  87.             self.txtinsert=wx.TextCtrl(paneltab,70+i,"",pos=(10,int(valorh)),size=(100,-1))
  88.             self.txtinsert.Bind(wx.EVT_KILL_FOCUS,self.onGuardarNombre,id=70+i)
  89.             self.cmbtipo=wx.ComboBox(paneltab, 100+i, "INT", (115,int(valorh)), (100,-1),style=wx.CB_DROPDOWN)
  90.             self.txtlong=wx.TextCtrl(paneltab,300+i,"",pos=(220,int(valorh)),size=(100,-1))
  91.             self.predetcmb=wx.ComboBox(paneltab, 500+i, "None", (330,int(valorh)), (100,-1),style=wx.CB_DROPDOWN)
  92.             self.txtpredet=wx.TextCtrl(paneltab,700+i,"",pos=(330,int(valorh+30)),size=(100,-1))
  93.             self.cmbcoteja=wx.ComboBox(paneltab, 900+i, "utf8_general_ci", (440,int(valorh)), (100,-1),style=wx.CB_DROPDOWN)
  94.             self.cmbatribu=wx.ComboBox(paneltab, 1100+i, "None", (550,int(valorh)), (100,-1),style=wx.CB_DROPDOWN)
  95.             self.chkboxnull=wx.CheckBox(paneltab,1300+i,"",pos=(680,int(valorh)),size=(60,-1))
  96.             self.cmbindice=wx.ComboBox(paneltab, 1500+i, "", (750,int(valorh)), (100,-1),style=wx.CB_DROPDOWN)
  97.             self.chkboxai=wx.CheckBox(paneltab,1700+i,"",pos=(860,int(valorh)),size=(60,-1))
  98.             self.txtcomment=wx.TextCtrl(paneltab,1900+i,"",pos=(890,int(valorh)),size=(80,-1))
  99.  
  100.             ##Proporcion de los controles P=P1+P2+35
  101.             #vacia lo que hay en la lista tipodedatos
  102.             for col in tipodedatos:
  103.                 self.cmbtipo.Append(str(col))
  104.             #vacia lo que hay en la lista predet
  105.             for pre in predet:
  106.                 self.predetcmb.Append(str(pre))
  107.  
  108.             #vacia lo que hay en la lista atrib
  109.             for atr in atrib:
  110.                 self.cmbatribu.Append(str(atr))
  111.  
  112.             #vacia lo que hay en la lista tipodedatos
  113.             for cin in indexes:
  114.                 self.cmbindice.Append(str(cin))
  115.                            
  116.             if(conexion):
  117.                 #realiza las consultas para mostrar las nuevas tablas
  118.                 showen="SHOW ENGINES;"
  119.                 consultacmb=oper.execute(showen)
  120.  
  121.                 if(consultacmb):
  122.                     x=0
  123.                     while 1:
  124.                         s = oper.fetchone()
  125.                         if not s:
  126.                             break
  127.                        
  128.                         self.motoralc.Append(str(s[0]))
  129.                         x=x+1
  130.  
  131.                 #realiza las consultas para mostrar las nuevas tablas
  132.                 showcoll="SHOW COLLATION;"
  133.                 consultacoll=oper.execute(showcoll)
  134.  
  135.                 if(consultacoll):
  136.                     y=0
  137.                     while 1:
  138.                         s = oper.fetchone()
  139.                         if not s:
  140.                             break
  141.                        
  142.                         self.cmbcoteja.Append(str(s[0]))
  143.                         y=y+1
  144.  
  145.             self.listxt.append(txtinsert)
  146.             self.listlon.append(txtlong)
  147.             self.listtipo.append(cmbtipo)
  148.             self.listpredet.append(predetcmb)
  149.             self.listcotej.append(cmbcoteja)
  150.             self.listatrib.append(cmbatribu)
  151.             self.listnull.append(chkboxnull)
  152.             self.listinx.append(cmbindice)
  153.             self.listaich.append(chkboxai)
  154.             self.listcomm.append(txtcomment)
  155.             valorh=valorh+(separacion*2)
  156.             i=i+1

Espero me puedan ayudar,
Gracias de Antemano.

Última edición por AlvaroG; 29/09/2009 a las 09:28 Razón: highlight
  #2 (permalink)  
Antiguo 28/09/2009, 19:16
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Capturar Valor de un textCtrl dinamicamente creado

Si pudieras identar tu código, no sabes como seria de fácil ayudarte.

Código python:
Ver original
  1. self.LstTxtCtrl = [wx.TextCtrl(self.panel, -1, "", size=(50, -1)) for i in range(n)]
  2. ...
  3. self.LstTxtCtrlValues = [i.GetValue() for i in self.LstTxtCtrl]

Pero básicamente así es como se obtiene los valores de una lista de TextControls
Explicación:
1.- Genera una lista de TextControls, todos con las mismas propiedades. Puedes acomodarlas en un grid.
2.- Genera una lista, que no son mas que los valores de la lista de TextControls.
  #3 (permalink)  
Antiguo 29/09/2009, 20:48
 
Fecha de Ingreso: septiembre-2009
Mensajes: 2
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Capturar Valor de un textCtrl dinamicamente creado

Muchas Gracias por su ayuda. Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:09.