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
def onClickCrearTabla(self,evt): #listas global listxt global listlon global listtipo global listpredet global listcotej global listatrib global listnull global listinx global listaich global listcomm global cadena #Evento en donde se crea la TABLA wx.MessageBox(str(self.listxt.index(1)),"OK",style=wx.OK) def onGuardarNombre(self,evt): global listxt global cadena self.txtinsert.Id=wx.GetCurrentId() cadena=str(self.txtinsert.GetValue()) wx.MessageBox(cadena,"OK",style=wx.OK) if not cadena=='': self.listxt.append(cadena) def onClickCrearCampo(self,evt): #GLOBALES #Generales global srv global nomu global passu global tipobd global conexion global oper global dbtmp global tabtmp global vistas global paneltab #listas Declaradas global listxt global listlon global listtipo global listpredet global listcotej global listatrib global listnull global listinx global listaich global listcomm #listas Instanciadas self.listxt=[] self.listlon=[] self.listtipo=[] self.listpredet=[] self.listcotej=[] self.listatrib=[] self.listnull=[] self.listinx=[] self.listaich=[] self.listcomm=[] #textnom=self.listxt.index(2) valorcmp=int(self.txtcampos.GetValue()) valorh=200 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'] predet=['None','Como fuera definido','NULL','CURRENT_TIMESTAMP'] atrib=['BINARY','UNSIGNED','UNSIGNED ZEROFILL','on update CURRENT_TIMESTAMP'] indexes=['PRIMARY','UNIQUE','INDEX','FULLTEXT'] separacion=30 ##Encabezado tablalblmk1=wx.StaticText(paneltab,-1,"Nombre",pos=(10,180),size=(70,-1)) tablalblmk2=wx.StaticText(paneltab,-1,"Tipo",pos=(115,180),size=(70,-1)) tablalblmk3=wx.StaticText(paneltab,-1,"Longitud",pos=(220,180),size=(80,-1)) tablalblmk4=wx.StaticText(paneltab,-1,"Predeterminado",pos=(320,180),size=(150,-1)) tablalblmk5=wx.StaticText(paneltab,-1,"Cotejamiento",pos=(440,180),size=(130,-1)) tablalblmk6=wx.StaticText(paneltab,-1,"Atributos",pos=(560,180),size=(100,-1)) tablalblmk7=wx.StaticText(paneltab,-1,"Nulo",pos=(670,180),size=(50,-1)) tablalblmk8=wx.StaticText(paneltab,-1,"Indice",pos=(750,180),size=(70,-1)) tablalblmk9=wx.StaticText(paneltab,-1,"A_I",pos=(855,180),size=(20,-1)) tablalblmk10=wx.StaticText(paneltab,-1,"Comentarios",pos=(890,180),size=(100,-1)) ################################################################################### for i in range(valorcmp): self.txtinsert=wx.TextCtrl(paneltab,70+i,"",pos=(10,int(valorh)),size=(100,-1)) self.txtinsert.Bind(wx.EVT_KILL_FOCUS,self.onGuardarNombre,id=70+i) self.cmbtipo=wx.ComboBox(paneltab, 100+i, "INT", (115,int(valorh)), (100,-1),style=wx.CB_DROPDOWN) self.txtlong=wx.TextCtrl(paneltab,300+i,"",pos=(220,int(valorh)),size=(100,-1)) self.predetcmb=wx.ComboBox(paneltab, 500+i, "None", (330,int(valorh)), (100,-1),style=wx.CB_DROPDOWN) self.txtpredet=wx.TextCtrl(paneltab,700+i,"",pos=(330,int(valorh+30)),size=(100,-1)) self.cmbcoteja=wx.ComboBox(paneltab, 900+i, "utf8_general_ci", (440,int(valorh)), (100,-1),style=wx.CB_DROPDOWN) self.cmbatribu=wx.ComboBox(paneltab, 1100+i, "None", (550,int(valorh)), (100,-1),style=wx.CB_DROPDOWN) self.chkboxnull=wx.CheckBox(paneltab,1300+i,"",pos=(680,int(valorh)),size=(60,-1)) self.cmbindice=wx.ComboBox(paneltab, 1500+i, "", (750,int(valorh)), (100,-1),style=wx.CB_DROPDOWN) self.chkboxai=wx.CheckBox(paneltab,1700+i,"",pos=(860,int(valorh)),size=(60,-1)) self.txtcomment=wx.TextCtrl(paneltab,1900+i,"",pos=(890,int(valorh)),size=(80,-1)) ##Proporcion de los controles P=P1+P2+35 #vacia lo que hay en la lista tipodedatos for col in tipodedatos: self.cmbtipo.Append(str(col)) #vacia lo que hay en la lista predet for pre in predet: self.predetcmb.Append(str(pre)) #vacia lo que hay en la lista atrib for atr in atrib: self.cmbatribu.Append(str(atr)) #vacia lo que hay en la lista tipodedatos for cin in indexes: self.cmbindice.Append(str(cin)) if(conexion): #realiza las consultas para mostrar las nuevas tablas showen="SHOW ENGINES;" consultacmb=oper.execute(showen) if(consultacmb): x=0 while 1: s = oper.fetchone() if not s: break self.motoralc.Append(str(s[0])) x=x+1 #realiza las consultas para mostrar las nuevas tablas showcoll="SHOW COLLATION;" consultacoll=oper.execute(showcoll) if(consultacoll): y=0 while 1: s = oper.fetchone() if not s: break self.cmbcoteja.Append(str(s[0])) y=y+1 self.listxt.append(txtinsert) self.listlon.append(txtlong) self.listtipo.append(cmbtipo) self.listpredet.append(predetcmb) self.listcotej.append(cmbcoteja) self.listatrib.append(cmbatribu) self.listnull.append(chkboxnull) self.listinx.append(cmbindice) self.listaich.append(chkboxai) self.listcomm.append(txtcomment) valorh=valorh+(separacion*2) i=i+1
Espero me puedan ayudar,
Gracias de Antemano.