El día 5 de abril de 2010 00:15, monoBOT <monobot.s...@gmail.com> escribió: > ´Funciona como un guante!!! ... muchas gracias luis miguel > OK. Ahora tu programa es portable a otros equipos. Si solucionas el problema modificando el sitecustomize.py, sólo funcionará en ese equipo.
Saludos, -- Luis Miguel > El 4 de abril de 2010 23:04, monoBOT <monobot.s...@gmail.com> escribió: >> >> Muchas gracias lo probare. >> >> El 4 de abril de 2010 22:38, Luis Miguel Morillas <moril...@gmail.com> >> escribió: >>> >>> El día 4 de abril de 2010 10:26, monoBOT <monobot.s...@gmail.com> >>> escribió: >>> > la línea 83 está en la función de grabado: >>> > def grabar(self, event): >>> > dialogo=wx.MessageDialog(None, '¿Desea Grabar y Salir?', >>> > 'Atención', >>> > wx.YES_NO|wx.ICON_QUESTION|wx.STAY_ON_TOP) >>> > respuesta=dialogo.ShowModal() >>> > if (respuesta ==wx.ID_YES): >>> > print 'obteniendo valores...' >>> > nombres_attr = ['numerocolegiado','nombre', >>> > 'primerapellido', >>> > 'segundoapellido', 'dni', 'direccion', 'codigopostal', 'poblacion', >>> > 'email', >>> > 'telefono1', 'telefono2'] >>> > datos_entrados = [self.ventana.entranumcol, >>> > self.ventana.entranombre, self.ventana.entraapellido1, >>> > self.ventana.entraapellido2, self.ventana.entradni, >>> > self.ventana.entradirec, >>> > self.ventana.entrapost, self.ventana.entrapobl, >>> > self.ventana.entraemail, >>> > self.ventana.entratf1, self.ventana.entratf2] >>> > print 'guardando...' >>> > for m in range(len(datos_entrados)): >>> > cambia_attrib(arbol='usuario', dato=nombres_attr[m], >>> > nuevovalor=reg_xml(datos_entrados[m].GetValue())) >>> > nom_empr = ['nombreempresa', 'cifempresa', >>> > 'direccionempresa','codigopostalempresa', 'telefonoempresa'] >>> > dat_empr = [self.ventana.entranombreempresa, >>> > self.ventana.entracifempresa, self.ventana.entradireccionempresa, >>> > self.ventana.entracodigopostalempresa, >>> > self.ventana.entratelefonoempresa] >>> > for m in range(len(nom_empr)): >>> > cambia_attrib(arbol='datosempresa', dato=nom_empr[m], >>> > nuevovalor=reg_xml(dat_empr[m].GetValue())) >>> > cambia_attrib('usuario', 'colegio', >>> > reg_xml(self.ventana.entracolegio.GetStringSelection())) >>> > cambia_attrib('usuario', 'provincia', >>> > reg_xml(self.ventana.entraprov.GetStringSelection())) >>> > guarda_datos(datogral) >>> > print 'guardado' >>> > self.Destroy() >>> > else: >>> > print 'Cancelado' >>> > dialogo.Destroy() >>> > la función de grabado lo que hace es llamar a unas >>> > variables self.ventana.entranombreempresa todas ellas se montan de >>> > esta >>> > forma: >>> > self.ventana.entranombre = wx.TextCtrl(self.ventana, -1, >>> > nombre_en_fichero) >>> > y el valor por defecto de cada una proviene del fichero xml también: >>> > nombre_en_fichero = xml_none(busqueda_xml ('usuario', 'nombre')) >>> > así que lo que hago es: >>> > lee xml ---> muestra en pantalla el dato guardado ---> el usuario >>> > cambia los >>> > datos ---> grabo los datos. >>> > las funciones de lectura y guardado de xml son: >>> > def busqueda_xml (arbol, dato): >>> > valor = >>> > >>> > arbol_gral.getElementsByTagName(arbol)[0].getElementsByTagName(dato)[0].childNodes[0].nodeValue >>> > return valor >>> > def guarda_datos(archivo): >>> > fichero = open(os.path.realpath(archivo), "w") >>> > arbol_gral.writexml(fichero, encoding='iso-8859-1') >>> > fichero.close() >>> > return True >>> >>> El error lo genera writexml en esta función. Yo no utilizo minidom, >>> pero supongo que esto te funcionará: >>> >>> import codecs # esto ponlo al principio del fichero >>> >>> def guarda_datos(archivo): >>> fichero = codecs.open(os.path.realpath(archivo), "w", 'iso-8859-1') >>> arbol_gral.writexml(fichero, encoding='iso-8859-1') >>> fichero.close() >>> return True >>> >>> Si quieres utilizar tu código en un sistema en producción, habría que >>> revisar algunas cosas. Yo te recomiendo utilizar otros módulos en >>> lugar de minidom. Echa un vistazo a Amara >>> (http://wiki.xml3k.org/Amara2), te permite manejar xml como si fueran >>> objetos python. >>> >>> --lm >>> >>> > la funcion xml_none lo que hace es cambiar una entrada igual a cero por >>> > un >>> > campo limpio >>> > def xml_none(m): >>> > if m =='0': >>> > n = '' >>> > return n >>> > return m >>> > la función contraria la pongo al grabar y lo que hace es convertir un >>> > campo >>> > vacío en un 0, y también los caracteres prohibidos por xml por sus >>> > sutitutos >>> > ... así evito el error al grabar. >>> > >>> > def reg_xml(m): >>> > if m == '': >>> > n = '0' >>> > return n >>> > n = m.replace('&', '&') >>> > n = n.replace('<','<') >>> > n = n.replace('>','>') >>> > return n >>> > >>> > -- >>> > monobotblog.alvarezalonso.es >>> > _______________________________________________ >>> > Python-es mailing list >>> > Python-es@python.org >>> > http://mail.python.org/mailman/listinfo/python-es >>> > FAQ: http://python-es-faq.wikidot.com/ >>> > >>> > >>> _______________________________________________ >>> Python-es mailing list >>> Python-es@python.org >>> http://mail.python.org/mailman/listinfo/python-es >>> FAQ: http://python-es-faq.wikidot.com/ >> >> >> >> -- >> Héctor Alvarez >> Arquitecto >> >> Advertencia legal: >> De acuerdo a la vigente Ley Orgánica 15/1999 de Protección de Datos de >> carácter Personal le informamos que: >> Este correo electrónico contiene información privada y estrictamente >> confidencial. Si usted NO ES el destinatario, NO ESTA AUTORIZADO a leerlo, >> directa o indirectamente, usar, revelar, distribuir, imprimir o copiar >> ninguna de las partes y/o anexos de éste mensaje. Si por error ha recibido >> este mensaje, le rogamos lo notifique a su emisor respondiendo a éste e-mail >> y proceda a borrar de su sistema inmediatamente el mensaje así como todas >> sus copias. > > > > -- > Héctor Alvarez > Arquitecto > > Advertencia legal: > De acuerdo a la vigente Ley Orgánica 15/1999 de Protección de Datos de > carácter Personal le informamos que: > Este correo electrónico contiene información privada y estrictamente > confidencial. Si usted NO ES el destinatario, NO ESTA AUTORIZADO a leerlo, > directa o indirectamente, usar, revelar, distribuir, imprimir o copiar > ninguna de las partes y/o anexos de éste mensaje. Si por error ha recibido > este mensaje, le rogamos lo notifique a su emisor respondiendo a éste e-mail > y proceda a borrar de su sistema inmediatamente el mensaje así como todas > sus copias. > > _______________________________________________ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/