[get Panel variables]

Hello pythonists.
Me been a nub cant solve this simple problem.

I got a frame where i have constructed a panel, in it i made a list of
control texts where the user can insert their data, then pressing the
"grabar" button a dialog box pops and pressing "Ok" the data is saved.

Well my problem is that as the controltexts are on the panel and the
dialog box is constructed with None (cant be constructed from a Panel
as far as i know) it cant get the Panel data saved i keep getting the
error that it cant recognize the variables.

I attach the Frame code.

Any suggestions? any workarounds? Tricks?

Many thanks and greetings from Canary Islands.

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

class VentanaUsuario(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, wx.GetApp().TopWindow, -1, 'Datos de
usuario', pos=(50,50), size=(800,600))

        #creando el ventana
        ventana = wx.Panel(self)
        #ventana.SetBackgroundColour('DarkRed')
        ventana.Show=(True)
        ventana.SetScrollbar(wx.VERTICAL, 0, 10, 20);

        #creando botones
        botongrabar = wx.Button(ventana, -1, 'Grabar datos',
size=(150,50))
        self.Bind(wx.EVT_BUTTON, self.grabar, botongrabar)
        #metemos los textos

        ## xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        ## recopilamos la informacion del archivo xml
        nombre_en_fichero = busqueda_xml ('usuario', 'nombre')
        primerapellido_en_fichero = busqueda_xml ('usuario',
'primerapellido')
        segundoapellido_en_fichero = busqueda_xml ('usuario',
'segundoapellido')
        dni_en_fichero = busqueda_xml ('usuario', 'dni')
        direccion_en_fichero = busqueda_xml ('usuario', 'direccion')
        restodireccion_en_fichero = busqueda_xml ('usuario',
'restodireccion')
        codigopostal_en_fichero = busqueda_xml ('usuario',
'codigopostal')
        poblacion_en_fichero = busqueda_xml ('usuario', 'poblacion')
        email_en_fichero = busqueda_xml ('usuario', 'email')
        telefono1_en_fichero = busqueda_xml ('usuario', 'telefono1')
        telefono2_en_fichero = busqueda_xml ('usuario', 'telefono2')
        ## xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

        #datos generales
## fuentemenus = wx.Font(22, wx.MODERN, wx.BOLD, wx.NORMAL)
        titulo1 = wx.StaticText(ventana, -1, "Datos de contacto")
## titulo1.SetFont(fuentemenus)
        txtnombre =wx.StaticText(ventana, -1, "Nombre del
profesional")
        entranombre = wx.TextCtrl(ventana, -1, nombre_en_fichero)
        txtapellido1 =wx.StaticText(ventana, -1, "Primer Apellido")
        entraapellido1 = wx.TextCtrl(ventana, -1,
primerapellido_en_fichero)
        txtapellido2 =wx.StaticText(ventana, -1, "Segundo Apellido")
        entraapellido2 = wx.TextCtrl(ventana, -1,
segundoapellido_en_fichero)
        txtdni = wx.StaticText(ventana, -1, "D.N.I.")
        entradni = wx.TextCtrl(ventana, -1, dni_en_fichero)
        txtdirec = wx.StaticText(ventana, -1, "Dirección")
        entradirec = wx.TextCtrl(ventana, -1, direccion_en_fichero)
        entrarestodirec = wx.TextCtrl(ventana, -1,
restodireccion_en_fichero)
        txtpost = wx.StaticText(ventana, -1, "Código Postal")
        entrapost = wx.TextCtrl(ventana, -1, codigopostal_en_fichero)
        txtpobl = wx.StaticText(ventana, -1, "Población")
        entrapobl = wx.TextCtrl(ventana, -1, poblacion_en_fichero)
        txtprov = wx.StaticText(ventana, -1, "Provincia")
        entraprov = wx.Choice(ventana, -1, choices = provincias)
        txtemail = wx.StaticText(ventana, -1, "Correo Electrónico")
        entraemail = wx.TextCtrl(ventana, -1, email_en_fichero)
        txttf1 = wx.StaticText(ventana, -1, "Teléfono")
        entratf1 = wx.TextCtrl(ventana, -1, telefono1_en_fichero)
        txttf2 = wx.StaticText(ventana, -1, "Otro Teléfono")
        entratf2 = wx.TextCtrl(ventana, -1, telefono2_en_fichero)

        #Datos de colegiación
        titulo2 = wx.StaticText(ventana, -1, "Datos de colegiación")
## titulo2.SetFont(fuentemenus)
        txtcolegio = wx.StaticText(ventana, -1, "Lugar de
Colegiación")
        entracolegio = wx.Choice(ventana, -1, choices = colegios)
        txtnumcol = wx.StaticText(ventana, -1, "Colegiado")
        entranumcol = wx.TextCtrl(ventana, -1, "11111")

        ##SIZERS
        # sizer general
        sizerpral = wx.BoxSizer(wx.VERTICAL)

        # sizer 2 columnas
        sizer2col = wx.FlexGridSizer( cols=2, hgap=15, vgap=5)
        sizer2col.AddGrowableCol(1)

        muestralogo=wx.StaticBitmap(ventana, -1,
wx.BitmapFromImage(wx.Image('./icons/logo.png', wx.BITMAP_TYPE_ANY)))
        sizer2col.Add(muestralogo)
        sizer2col.Add(titulo1, 0, wx.ALIGN_LEFT|
wx.ALIGN_CENTER_VERTICAL)

        # sizer horizontal 1
        sizerhor1 = wx.BoxSizer(wx.HORIZONTAL)
        sizer2col.Add(txtnombre, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
        sizerhor1.Add(entranombre, 1, wx.EXPAND)
        sizerhor1.Add(txtapellido1, 0, wx.LEFT|wx.RIGHT|
wx.ALIGN_CENTER_VERTICAL, 5)
        sizerhor1.Add(entraapellido1, 0, wx.EXPAND)
        sizerhor1.Add(txtapellido2, 0, wx.LEFT|wx.RIGHT|
wx.ALIGN_CENTER_VERTICAL, 5)
        sizerhor1.Add(entraapellido2, 1, wx.EXPAND)
        sizer2col.Add(sizerhor1, 0, wx.EXPAND)

        sizer2col.Add(txtdni, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
        sizer2col.Add(entradni, 0, wx.EXPAND)
        sizer2col.Add(txtdirec, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
        sizer2col.Add(entradirec, 0, wx.EXPAND)
        sizer2col.Add((10,10))
        sizer2col.Add(entrarestodirec, 0, wx.EXPAND)

        #sizer horizontal 2
        sizerhor2 = wx.BoxSizer(wx.HORIZONTAL)
        sizer2col.Add(txtpobl, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
        sizerhor2.Add(entrapobl, 1, wx.EXPAND)
        sizerhor2.Add(txtpost, 0, wx.LEFT|wx.RIGHT|
wx.ALIGN_CENTER_VERTICAL, 5)
        sizerhor2.Add(entrapost, 0, wx.EXPAND)
        sizerhor2.Add(txtprov, 0, wx.LEFT|wx.RIGHT|
wx.ALIGN_CENTER_VERTICAL, 5)
        sizerhor2.Add(entraprov, 1, wx.EXPAND)

        sizer2col.Add(sizerhor2, 0, wx.EXPAND)

        #sizer horizontal 3
        sizerhor3 = wx.BoxSizer(wx.HORIZONTAL)
        sizer2col.Add(txtemail, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
        sizerhor3.Add(entraemail, 1, wx.EXPAND)
        sizerhor3.Add(txttf1, 0, wx.LEFT|wx.RIGHT|
wx.ALIGN_CENTER_VERTICAL, 5)
        sizerhor3.Add(entratf1, 0, wx.EXPAND)
        sizerhor3.Add(txttf2, 0, wx.LEFT|wx.RIGHT|
wx.ALIGN_CENTER_VERTICAL, 5)
        sizerhor3.Add(entratf2, 1, wx.EXPAND)
        sizer2col.Add(sizerhor3, 0, wx.EXPAND)

        sizer2col.Add((10,10))
        sizer2col.Add((10,10))
        sizer2col.Add((10,10))
        sizer2col.Add(wx.StaticLine(ventana), 15, wx.EXPAND|wx.TOP|
wx.BOTTOM, 5)

        sizer2col.Add((10,10))
        sizer2col.Add(titulo2, 0, wx.ALIGN_LEFT|
wx.ALIGN_CENTER_VERTICAL)

        sizer2col.Add(txtcolegio, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
        sizer2col.Add(entracolegio, 0, wx.EXPAND)
        sizer2col.Add(txtnumcol, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
        sizer2col.Add(entranumcol, 0, wx.EXPAND)

        #sizer botonera
        sizerbot=wx.BoxSizer(wx.HORIZONTAL)
        sizer2col.Add((10,10))
        sizer2col.Add((10,10))
        sizer2col.Add((10,50))
        sizerbot.Add((10,10),wx.EXPAND)
        sizerbot.Add(botongrabar)
        #añadimos el sizer botonera al flexible
        sizer2col.Add(sizerbot, 0, wx.EXPAND|wx.BOTTOM, 10)

        # añadimos el flexible en el general
        sizerpral.Add(sizer2col, 0, wx.EXPAND|wx.ALL, 10)

        # ponemos sizer al panel
        ventana.SetSizer(sizerpral)
        # y al marco, junto con tamaño mínimo
        sizer = wx.BoxSizer()
        sizer.Add(ventana, 1, wx.EXPAND)
        self.SetMinSize((800,600))
        #self.SetMaxSize((800,900))

    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):
            cambia_attrib('usuario', 'nombre', entranombre.value())
            cambia_attrib('usuario', 'primerapellido',
entraprimerapellido.value)
            cambia_attrib('usuario', 'segundoapellido',
entrasegundoapellido.value)
            cambia_attrib('usuario', 'dni', entradni.value)
            cambia_attrib('usuario', 'direccion',
entradireccion.value)
            cambia_attrib('usuario', 'restodireccion',
entrarestodireccion.value)
            cambia_attrib('usuario', 'codigopostal',
entracodigopostal.value)
            cambia_attrib('usuario', 'poblacion',
entrapoblacion.value)
            cambia_attrib('usuario', 'email', entraemail.value)
            cambia_attrib('usuario', 'telefono1', entratf1.value)
            cambia_attrib('usuario', 'telefono2', entratf2.value)

            self.Destroy()
        else:
            print 'Cancelado'
            dialogo.Destroy()

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Sorry i didnt pated a runnning code ... here it goes:
at the bottom is the .xml file

thanks again.

# -*- coding: cp1252 -*-
import wx
import os
from xml.dom import minidom

##Variables globales
provincias=['Álava','Albacete','Alicante','Almería','Asturias','Ávila','Badajoz','Barcelona','Burgos','Cáceres','Cantabria','Castellón','Ciudad
Real','Córdoba','Cuenca','Gerona','Granada','Guadalajara','Guipúzcoa','Huelva','Huesca','Islas
Baleares','Jaén','La Coruña','La Rioja','Las
Palmas','León','Lérida','Lugo','Madrid','Málaga','Murcia','Orense','Palencia','Pontevedra','Salamanca','S/
C de
Tenerife','Segovia','Sevilla','Soria','Tarragona','Teruel','Toledo','Valencia','Valladolid','Vizcaya','Zamora','Zaragoza','Ceuta','Melilla']
colegios=['Consejo Andaluz: Almería','Consejo Andaluz: Cádiz','Consejo
Andaluz: Córdoba','Consejo Andaluz: Granada','Consejo Andaluz:
Huelva','Consejo Andaluz: Jaen','Consejo Andaluz: Málaga','Consejo
Andaluz: Sevilla','Islas Baleares: Mallorca','Islas Baleares:
Menorca','Islas Baleares: Eivissa y Formentera','Catalunya:
Barcelona','Catalunya: Ebro','Catalunya: Girona','Catalunya:
Lleida','Catalunya: Tarragona','Extremadura','Galicia','Comunidad
Valenciana: Valencia','Comunidad Valenciana: Alicante','Comunidad
Valenciana: Castellón','León: León','León: Palencia','León:
Salamanca','León: Zamora','La
Rioja','Madrid','Murcia','Asturias','Canarias:
Fuerteventura','Canarias: Lanzarote','Canarias: Gran
Canaria','Canarias: Tenerife Gomera y Hierro','Canarias: La
Palma','Cantabria','Castilla La Mancha: Toledo','Castilla La Mancha:
Albacete','Castilla La Mancha: Ciudad Real','Castilla La Mancha:
Cuenca','Castilla La Mancha: Guadalajara','Castilla y León Este:
Ávila','Castilla y León Este: Burgos','Castilla y León Este:
Segovia','Castilla y León Este: Soria','Castilla y León Este:
Valladolid','Vasco Navarro: Vizcaya','Vasco Navarro: Álava','Vasco
Navarro: Guipúzcoa','Vasco Navarro: Navarra','Aragón:
Zaragoza','Aragón :Huesca','Aragón: Teruel','Ceuta','Ciudad Autónoma
de Melilla']
imagen='./icons/logo.png'

##ids de los objetos

ID_MARCOPRAL=11

ID_NUEVO=100
ID_ABRIR=101
ID_GRABAR=102
ID_IMPR=103

ID_USR=301
ID_GRAL=401

ID_SI=501
ID_SU=601
ID_HE=701
ID_HS=801

ID_SALIR=901
ID_ACERCADE=1001

##funciones de manejadores xml
##xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

##definiendo variables
arbol_gral = minidom.parse('datogral.xml')

##definiendo funciones

def busqueda_xml (arbol, dato):
    valor = arbol_gral.getElementsByTagName(arbol)
[0].getElementsByTagName(dato)[0].childNodes[0].nodeValue
    return valor

def busqueda_3xml (arbol, dato, subdato):
    valor = arbol_gral.getElementsByTagName(arbol)
[0].getElementsByTagName(dato)[0].getElementsByTagName(subdato)
[0].childNodes[0].nodeValue
    return valor

def busqueda_lista (arbol, lista):
    datos=''
    m = lista.split()
    for palabra in m:
        valor = arbol_gral.getElementsByTagName(arbol)
[0].getElementsByTagName(palabra)[0].childNodes[0].nodeValue
        datos += 'el %s de %s es: ' % (palabra, arbol) + valor +'\n'
    print datos

def guarda_datos(archivo):
    fichero = open(os.path.realpath(archivo), "w")
    arbol_gral.writexml(fichero, encoding='iso-8859-1')
    fichero.close()
    return True

def cambia_attrib(arbol, dato, nuevovalor):
    nodo_mod = arbol_gral.getElementsByTagName(arbol)
[0].getElementsByTagName(dato)[0]
    nodo_mod.childNodes[0].nodeValue = nuevovalor
    print nodo_mod.childNodes[0].nodeValue
    return True

## xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

class MyApp(wx.App):
    def OnInit(self):
        pos=(50,50)
        size=(800,600)
        marco=marcoprincipal('monoBOT CTE', pos, size)
        marco.Show(True)
        marco.Maximize()
        self.SetTopWindow(marco)
        return True

class marcoprincipal(wx.Frame):
    def __init__(self,title, pos, size):
        marco=wx.Frame.__init__(self,None,ID_MARCOPRAL,title, pos,
size)

## creando el ventana
        ventana = wx.Panel(self)
## ventana.SetBackgroundcolour('DarkRed')
        ventana.Show=(True)
        ventana.SetScrollbar(wx.VERTICAL, 0, 10, 20);

## creando boton
        botongrabar = wx.Button(ventana, -1, 'Grabar datos',
size=(150,50))
        self.Bind(wx.EVT_BUTTON, self.grabar, botongrabar)

## xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
## recopilamos la informacion del archivo xml
        nombre_en_fichero = busqueda_xml ('usuario', 'nombre')
        primerapellido_en_fichero = busqueda_xml ('usuario',
'primerapellido')
        segundoapellido_en_fichero = busqueda_xml ('usuario',
'segundoapellido')
        dni_en_fichero = busqueda_xml ('usuario', 'dni')
        direccion_en_fichero = busqueda_xml ('usuario', 'direccion')
        restodireccion_en_fichero = busqueda_xml ('usuario',
'restodireccion')
        codigopostal_en_fichero = busqueda_xml ('usuario',
'codigopostal')
        poblacion_en_fichero = busqueda_xml ('usuario', 'poblacion')
        provincia_en_fichero = busqueda_xml ('usuario', 'provincia')
        email_en_fichero = busqueda_xml ('usuario', 'email')
        telefono1_en_fichero = busqueda_xml ('usuario', 'telefono1')
        telefono2_en_fichero = busqueda_xml ('usuario', 'telefono2')

        colegio_en_fichero = busqueda_xml ('usuario', 'colegio')
        numerocolegiado_en_fichero = busqueda_xml ('usuario',
'numerocolegiado')
## xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

## datos generales
## fuentemenus = wx.Font(22, wx.MODERN, wx.BOLD, wx.NORMAL)
        titulo1 = wx.StaticText(ventana, -1, "Datos de contacto")
## titulo1.SetFont(fuentemenus)

        txtnombre =wx.StaticText(ventana, -1, "Nombre del
profesional")
        entranombre = wx.TextCtrl(ventana, -1, nombre_en_fichero)
        txtapellido1 =wx.StaticText(ventana, -1, "Primer Apellido")
        entraapellido1 = wx.TextCtrl(ventana, -1,
primerapellido_en_fichero)
        txtapellido2 =wx.StaticText(ventana, -1, "Segundo Apellido")
        entraapellido2 = wx.TextCtrl(ventana, -1,
segundoapellido_en_fichero)
        txtdni = wx.StaticText(ventana, -1, "D.N.I.")
        entradni = wx.TextCtrl(ventana, -1, dni_en_fichero)
        txtdirec = wx.StaticText(ventana, -1, "Dirección")
        entradirec = wx.TextCtrl(ventana, -1, direccion_en_fichero)
        entrarestodirec = wx.TextCtrl(ventana, -1,
restodireccion_en_fichero)
        txtpost = wx.StaticText(ventana, -1, "Código Postal")
        entrapost = wx.TextCtrl(ventana, -1, codigopostal_en_fichero)
        txtpobl = wx.StaticText(ventana, -1, "Población")
        entrapobl = wx.TextCtrl(ventana, -1, poblacion_en_fichero)
        txtprov = wx.StaticText(ventana, -1, "Provincia")
        entraprov = wx.Choice(ventana, -1, choices = provincias)
        entraprov.SetStringSelection(provincia_en_fichero)

        txtemail = wx.StaticText(ventana, -1, "Correo Electrónico")
        entraemail = wx.TextCtrl(ventana, -1, email_en_fichero)
        txttf1 = wx.StaticText(ventana, -1, "Teléfono")
        entratf1 = wx.TextCtrl(ventana, -1, telefono1_en_fichero)
        txttf2 = wx.StaticText(ventana, -1, "Otro Teléfono")
        entratf2 = wx.TextCtrl(ventana, -1, telefono2_en_fichero)
## Datos de colegiación
        titulo2 = wx.StaticText(ventana, -1, "Datos de colegiación")
## titulo2.SetFont(fuentemenus)
        txtcolegio = wx.StaticText(ventana, -1, "Lugar de
Colegiación")
        entracolegio = wx.Choice(ventana, -1, choices = colegios)
        entracolegio.SetStringSelection(colegio_en_fichero)
        txtnumcol = wx.StaticText(ventana, -1, "Colegiado")
        entranumcol = wx.TextCtrl(ventana, -1,
numerocolegiado_en_fichero)

## SIZERS
## sizer general
        sizerpral = wx.BoxSizer(wx.VERTICAL)

## sizer 2 columnas
        sizer2col = wx.FlexGridSizer( cols=2, hgap=15, vgap=5)
        sizer2col.AddGrowableCol(1)

        muestralogo=wx.StaticBitmap(ventana, -1,
wx.BitmapFromImage(wx.Image('./icons/logo.png', wx.BITMAP_TYPE_ANY)))
        sizer2col.Add(muestralogo)
        sizer2col.Add(titulo1, 0, wx.ALIGN_LEFT|
wx.ALIGN_CENTER_VERTICAL)

## sizer horizontal 1
        sizerhor1 = wx.BoxSizer(wx.HORIZONTAL)
        sizer2col.Add(txtnombre, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
        sizerhor1.Add(entranombre, 1, wx.EXPAND)
        sizerhor1.Add(txtapellido1, 0, wx.LEFT|wx.RIGHT|
wx.ALIGN_CENTER_VERTICAL, 5)
        sizerhor1.Add(entraapellido1, 0, wx.EXPAND)
        sizerhor1.Add(txtapellido2, 0, wx.LEFT|wx.RIGHT|
wx.ALIGN_CENTER_VERTICAL, 5)
        sizerhor1.Add(entraapellido2, 1, wx.EXPAND)
        sizer2col.Add(sizerhor1, 0, wx.EXPAND)

        sizer2col.Add(txtdni, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
        sizer2col.Add(entradni, 0, wx.EXPAND)
        sizer2col.Add(txtdirec, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
        sizer2col.Add(entradirec, 0, wx.EXPAND)
        sizer2col.Add((10,10))
        sizer2col.Add(entrarestodirec, 0, wx.EXPAND)

## sizer horizontal 2
        sizerhor2 = wx.BoxSizer(wx.HORIZONTAL)
        sizer2col.Add(txtpobl, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
        sizerhor2.Add(entrapobl, 1, wx.EXPAND)
        sizerhor2.Add(txtpost, 0, wx.LEFT|wx.RIGHT|
wx.ALIGN_CENTER_VERTICAL, 5)
        sizerhor2.Add(entrapost, 0, wx.EXPAND)
        sizerhor2.Add(txtprov, 0, wx.LEFT|wx.RIGHT|
wx.ALIGN_CENTER_VERTICAL, 5)
        sizerhor2.Add(entraprov, 1, wx.EXPAND)

        sizer2col.Add(sizerhor2, 0, wx.EXPAND)

## sizer horizontal 3
        sizerhor3 = wx.BoxSizer(wx.HORIZONTAL)
        sizer2col.Add(txtemail, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
        sizerhor3.Add(entraemail, 1, wx.EXPAND)
        sizerhor3.Add(txttf1, 0, wx.LEFT|wx.RIGHT|
wx.ALIGN_CENTER_VERTICAL, 5)
        sizerhor3.Add(entratf1, 0, wx.EXPAND)
        sizerhor3.Add(txttf2, 0, wx.LEFT|wx.RIGHT|
wx.ALIGN_CENTER_VERTICAL, 5)
        sizerhor3.Add(entratf2, 1, wx.EXPAND)
        sizer2col.Add(sizerhor3, 0, wx.EXPAND)

        sizer2col.Add((10,10))
        sizer2col.Add((10,10))
        sizer2col.Add((10,10))
        sizer2col.Add(wx.StaticLine(ventana), 15, wx.EXPAND|wx.TOP|
wx.BOTTOM, 5)

        sizer2col.Add((10,10))
        sizer2col.Add(titulo2, 0, wx.ALIGN_LEFT|
wx.ALIGN_CENTER_VERTICAL)

        sizer2col.Add(txtcolegio, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
        sizer2col.Add(entracolegio, 0, wx.EXPAND)
        sizer2col.Add(txtnumcol, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
        sizer2col.Add(entranumcol, 0, wx.EXPAND)

## metemos los textos

## sizer botonera
        sizerbot=wx.BoxSizer(wx.HORIZONTAL)
        sizer2col.Add((10,10))
        sizer2col.Add((10,10))
        sizer2col.Add((10,50))
        sizerbot.Add((10,10),wx.EXPAND)
        sizerbot.Add(botongrabar)
## añadimos el sizer botonera al flexible
        sizer2col.Add(sizerbot, 0, wx.EXPAND|wx.BOTTOM, 10)

## añadimos el flexible en el general
        sizerpral.Add(sizer2col, 0, wx.EXPAND|wx.ALL, 10)

## ponemos sizer al panel
        ventana.SetSizer(sizerpral)
## y al marco, junto con tamaño mínimo
        sizer = wx.BoxSizer()
        sizer.Add(ventana, 1, wx.EXPAND)
        self.SetMinSize((800,600))
## self.SetMaxSize((800,900))

    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 = ['nombre', 'primerapellido',
'segundoapellido', 'dni', 'direccion', 'restodireccion',
'codigopostal', 'poblacion', 'email', 'telefono1', 'telefono2']
            datos_entrados = [entranombre, entraprimerapellido,
entrasegundoapellido, entradni, entradireccion, entrarestodireccion,
entracodigopostal, entrapoblacion, entraemail, entratf1, entratf2]
            for m in range(len(datos_entrados)):
                cambia_attrib(arbol='usuario', dato=nombres_attr[m],
nuevovalor=datos_entrados[m].value)
            print 'guardando...'
            guarda_datos('datogral.xml')
            print 'guardado'
            self.Destroy()
        else:
            print 'Cancelado'
            dialogo.Destroy()

if __name__=='__main__':
    aplicacion=MyApp()
    aplicacion.MainLoop()

#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x
#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x
#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x
#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x

this is the xml file ... named datogral.xml

<?xml version="1.0" encoding="iso-8859-1"?>
<root>
  <persona>
    <usuario>
      <datos_pesonales>
        <nombre>eres un maquina</nombre>
        <primerapellido>1apellido usuario</primerapellido>
        <segundoapellido>2apellido usuario</segundoapellido>
        <dni>su dni</dni>
        <direccion>direccion</direccion>
        <restodireccion>restodireccion</restodireccion>
        <codigopostal>08001</codigopostal>
        <poblacion>Madrid</poblacion>
        <provincia>madrid</provincia>
        <telefono1>555555555</telefono1>
        <telefono2>66666666</telefono2>
        <email>nombre@dominio.ext</email>
        <colegio>Consejo Andaluz: Almería</colegio>
        <numerocolegiado>1</numerocolegiado>
      </datos_pesonales>
      <datosempresa>
        <nombreempresa>0</nombreempresa>
        <cif>0</cif>
        <direccionempresa>direccion</direccionempresa>
        <restodireccionempresa>restodireccion</restodireccionempresa>
      </datosempresa>
    </usuario>
  </persona>
</root>

Hi,

In your "grabar" function, you're trying to access objects such as
"entranombre".
However, "entranombre" is not an object belonging to your panel.

The way you could do it is e.g.

···

####################################
#!/usr/bin/python
import wx

class MyApp(wx.App):
    def __init__(self):
        wx.App.__init__(self, redirect=False)

    def OnInit(self):
        f = wx.Frame(None, -1, "Frame")
        self.p = wx.Panel(f, -1) #p is a wx.Panel object belonging
to the MyApp object --> self.p
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        text = wx.StaticText(self.p, -1, "Name")
        self.p.val = wx.TextCtrl(self.p, -1) #val is an object
belonging to self.p
        self.p.button = wx.Button(self.p, -1, "OK") #Same for the
other objects
        self.p.button.Bind(wx.EVT_BUTTON, self.OnButton)
        sizer.Add(text)
        sizer.AddSpacer(10)
        sizer.Add(self.p.val)
        sizer.AddSpacer(10)
        sizer.Add(self.p.button)
        self.p.SetSizer(sizer)
        f.Show()
        return True

    def OnButton(self, evt):
        #I get access to the object p in the MyApp object (by using
self.p).
        #And within the panel object I have access to the val object
(by using self.p.val).
        print self.p.val.GetValue()

if __name__=="__main__":
    app = MyApp()
    app.MainLoop()
####################################

Best regards,
Tom.

On Mar 30, 12:34 pm, monobot <hector...@gmail.com> wrote:

Sorry i didnt pated a runnning code ... here it goes:
at the bottom is the .xml file

thanks again.

# -*- coding: cp1252 -*-
import wx
import os
from xml.dom import minidom

##Variables globales
provincias=['Álava','Albacete','Alicante','Almería','Asturias','Ávila','Badajoz','Barcelona','Burgos','Cáceres','Cantabria','Castellón','Ciudad
Real','Córdoba','Cuenca','Gerona','Granada','Guadalajara','Guipúzcoa','Huelva','Huesca','Islas
Baleares','Jaén','La Coruña','La Rioja','Las
Palmas','León','Lérida','Lugo','Madrid','Málaga','Murcia','Orense','Palencia','Pontevedra','Salamanca','S/
C de
Tenerife','Segovia','Sevilla','Soria','Tarragona','Teruel','Toledo','Valencia','Valladolid','Vizcaya','Zamora','Zaragoza','Ceuta','Melilla']
colegios=['Consejo Andaluz: Almería','Consejo Andaluz: Cádiz','Consejo
Andaluz: Córdoba','Consejo Andaluz: Granada','Consejo Andaluz:
Huelva','Consejo Andaluz: Jaen','Consejo Andaluz: Málaga','Consejo
Andaluz: Sevilla','Islas Baleares: Mallorca','Islas Baleares:
Menorca','Islas Baleares: Eivissa y Formentera','Catalunya:
Barcelona','Catalunya: Ebro','Catalunya: Girona','Catalunya:
Lleida','Catalunya: Tarragona','Extremadura','Galicia','Comunidad
Valenciana: Valencia','Comunidad Valenciana: Alicante','Comunidad
Valenciana: Castellón','León: León','León: Palencia','León:
Salamanca','León: Zamora','La
Rioja','Madrid','Murcia','Asturias','Canarias:
Fuerteventura','Canarias: Lanzarote','Canarias: Gran
Canaria','Canarias: Tenerife Gomera y Hierro','Canarias: La
Palma','Cantabria','Castilla La Mancha: Toledo','Castilla La Mancha:
Albacete','Castilla La Mancha: Ciudad Real','Castilla La Mancha:
Cuenca','Castilla La Mancha: Guadalajara','Castilla y León Este:
Ávila','Castilla y León Este: Burgos','Castilla y León Este:
Segovia','Castilla y León Este: Soria','Castilla y León Este:
Valladolid','Vasco Navarro: Vizcaya','Vasco Navarro: Álava','Vasco
Navarro: Guipúzcoa','Vasco Navarro: Navarra','Aragón:
Zaragoza','Aragón :Huesca','Aragón: Teruel','Ceuta','Ciudad Autónoma
de Melilla']
imagen='./icons/logo.png'

##ids de los objetos

ID_MARCOPRAL=11

ID_NUEVO=100
ID_ABRIR=101
ID_GRABAR=102
ID_IMPR=103

ID_USR=301
ID_GRAL=401

ID_SI=501
ID_SU=601
ID_HE=701
ID_HS=801

ID_SALIR=901
ID_ACERCADE=1001

##funciones de manejadores xml
##xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

##definiendo variables
arbol_gral = minidom.parse('datogral.xml')

##definiendo funciones

def busqueda_xml (arbol, dato):
valor = arbol_gral.getElementsByTagName(arbol)
[0].getElementsByTagName(dato)[0].childNodes[0].nodeValue
return valor

def busqueda_3xml (arbol, dato, subdato):
valor = arbol_gral.getElementsByTagName(arbol)
[0].getElementsByTagName(dato)[0].getElementsByTagName(subdato)
[0].childNodes[0].nodeValue
return valor

def busqueda_lista (arbol, lista):
datos=''
m = lista.split()
for palabra in m:
valor = arbol_gral.getElementsByTagName(arbol)
[0].getElementsByTagName(palabra)[0].childNodes[0].nodeValue
datos += 'el %s de %s es: ' % (palabra, arbol) + valor +'\n'
print datos

def guarda_datos(archivo):
fichero = open(os.path.realpath(archivo), "w")
arbol_gral.writexml(fichero, encoding='iso-8859-1')
fichero.close()
return True

def cambia_attrib(arbol, dato, nuevovalor):
nodo_mod = arbol_gral.getElementsByTagName(arbol)
[0].getElementsByTagName(dato)[0]
nodo_mod.childNodes[0].nodeValue = nuevovalor
print nodo_mod.childNodes[0].nodeValue
return True

## xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

class MyApp(wx.App):
def OnInit(self):
pos=(50,50)
size=(800,600)
marco=marcoprincipal('monoBOT CTE', pos, size)
marco.Show(True)
marco.Maximize()
self.SetTopWindow(marco)
return True

class marcoprincipal(wx.Frame):
def __init__(self,title, pos, size):
marco=wx.Frame.__init__(self,None,ID_MARCOPRAL,title, pos,
size)

## creando el ventana
ventana = wx.Panel(self)
## ventana.SetBackgroundcolour('DarkRed')
ventana.Show=(True)
ventana.SetScrollbar(wx.VERTICAL, 0, 10, 20);

## creando boton
botongrabar = wx.Button(ventana, -1, 'Grabar datos',
size=(150,50))
self.Bind(wx.EVT_BUTTON, self.grabar, botongrabar)

## xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
## recopilamos la informacion del archivo xml
nombre_en_fichero = busqueda_xml ('usuario', 'nombre')
primerapellido_en_fichero = busqueda_xml ('usuario',
'primerapellido')
segundoapellido_en_fichero = busqueda_xml ('usuario',
'segundoapellido')
dni_en_fichero = busqueda_xml ('usuario', 'dni')
direccion_en_fichero = busqueda_xml ('usuario', 'direccion')
restodireccion_en_fichero = busqueda_xml ('usuario',
'restodireccion')
codigopostal_en_fichero = busqueda_xml ('usuario',
'codigopostal')
poblacion_en_fichero = busqueda_xml ('usuario', 'poblacion')
provincia_en_fichero = busqueda_xml ('usuario', 'provincia')
email_en_fichero = busqueda_xml ('usuario', 'email')
telefono1_en_fichero = busqueda_xml ('usuario', 'telefono1')
telefono2_en_fichero = busqueda_xml ('usuario', 'telefono2')

    colegio\_en\_fichero = busqueda\_xml \(&#39;usuario&#39;, &#39;colegio&#39;\)
    numerocolegiado\_en\_fichero = busqueda\_xml \(&#39;usuario&#39;,

'numerocolegiado')
## xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

## datos generales
## fuentemenus = wx.Font(22, wx.MODERN, wx.BOLD, wx.NORMAL)
titulo1 = wx.StaticText(ventana, -1, "Datos de contacto")
## titulo1.SetFont(fuentemenus)

    txtnombre =wx\.StaticText\(ventana, \-1, &quot;Nombre del

profesional")
entranombre = wx.TextCtrl(ventana, -1, nombre_en_fichero)
txtapellido1 =wx.StaticText(ventana, -1, "Primer Apellido")
entraapellido1 = wx.TextCtrl(ventana, -1,
primerapellido_en_fichero)
txtapellido2 =wx.StaticText(ventana, -1, "Segundo Apellido")
entraapellido2 = wx.TextCtrl(ventana, -1,
segundoapellido_en_fichero)
txtdni = wx.StaticText(ventana, -1, "D.N.I.")
entradni = wx.TextCtrl(ventana, -1, dni_en_fichero)
txtdirec = wx.StaticText(ventana, -1, "Dirección")
entradirec = wx.TextCtrl(ventana, -1, direccion_en_fichero)
entrarestodirec = wx.TextCtrl(ventana, -1,
restodireccion_en_fichero)
txtpost = wx.StaticText(ventana, -1, "Código Postal")
entrapost = wx.TextCtrl(ventana, -1, codigopostal_en_fichero)
txtpobl = wx.StaticText(ventana, -1, "Población")
entrapobl = wx.TextCtrl(ventana, -1, poblacion_en_fichero)
txtprov = wx.StaticText(ventana, -1, "Provincia")
entraprov = wx.Choice(ventana, -1, choices = provincias)
entraprov.SetStringSelection(provincia_en_fichero)

    txtemail = wx\.StaticText\(ventana, \-1, &quot;Correo Electrónico&quot;\)
    entraemail = wx\.TextCtrl\(ventana, \-1, email\_en\_fichero\)
    txttf1 = wx\.StaticText\(ventana, \-1, &quot;Teléfono&quot;\)
    entratf1 = wx\.TextCtrl\(ventana, \-1, telefono1\_en\_fichero\)
    txttf2 = wx\.StaticText\(ventana, \-1, &quot;Otro Teléfono&quot;\)
    entratf2 = wx\.TextCtrl\(ventana, \-1, telefono2\_en\_fichero\)

## Datos de colegiación
titulo2 = wx.StaticText(ventana, -1, "Datos de colegiación")
## titulo2.SetFont(fuentemenus)
txtcolegio = wx.StaticText(ventana, -1, "Lugar de
Colegiación")
entracolegio = wx.Choice(ventana, -1, choices = colegios)
entracolegio.SetStringSelection(colegio_en_fichero)
txtnumcol = wx.StaticText(ventana, -1, "Colegiado")
entranumcol = wx.TextCtrl(ventana, -1,
numerocolegiado_en_fichero)

## SIZERS
## sizer general
sizerpral = wx.BoxSizer(wx.VERTICAL)

## sizer 2 columnas
sizer2col = wx.FlexGridSizer( cols=2, hgap=15, vgap=5)
sizer2col.AddGrowableCol(1)

    muestralogo=wx\.StaticBitmap\(ventana, \-1,

wx.BitmapFromImage(wx.Image('./icons/logo.png', wx.BITMAP_TYPE_ANY)))
sizer2col.Add(muestralogo)
sizer2col.Add(titulo1, 0, wx.ALIGN_LEFT|
wx.ALIGN_CENTER_VERTICAL)

## sizer horizontal 1
sizerhor1 = wx.BoxSizer(wx.HORIZONTAL)
sizer2col.Add(txtnombre, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
sizerhor1.Add(entranombre, 1, wx.EXPAND)
sizerhor1.Add(txtapellido1, 0, wx.LEFT|wx.RIGHT|
wx.ALIGN_CENTER_VERTICAL, 5)
sizerhor1.Add(entraapellido1, 0, wx.EXPAND)
sizerhor1.Add(txtapellido2, 0, wx.LEFT|wx.RIGHT|
wx.ALIGN_CENTER_VERTICAL, 5)
sizerhor1.Add(entraapellido2, 1, wx.EXPAND)
sizer2col.Add(sizerhor1, 0, wx.EXPAND)

    sizer2col\.Add\(txtdni, 0, wx\.ALIGN\_RIGHT|

wx.ALIGN_CENTER_VERTICAL)
sizer2col.Add(entradni, 0, wx.EXPAND)
sizer2col.Add(txtdirec, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
sizer2col.Add(entradirec, 0, wx.EXPAND)
sizer2col.Add((10,10))
sizer2col.Add(entrarestodirec, 0, wx.EXPAND)

## sizer horizontal 2
sizerhor2 = wx.BoxSizer(wx.HORIZONTAL)
sizer2col.Add(txtpobl, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
sizerhor2.Add(entrapobl, 1, wx.EXPAND)
sizerhor2.Add(txtpost, 0, wx.LEFT|wx.RIGHT|
wx.ALIGN_CENTER_VERTICAL, 5)
sizerhor2.Add(entrapost, 0, wx.EXPAND)
sizerhor2.Add(txtprov, 0, wx.LEFT|wx.RIGHT|
wx.ALIGN_CENTER_VERTICAL, 5)
sizerhor2.Add(entraprov, 1, wx.EXPAND)

    sizer2col\.Add\(sizerhor2, 0, wx\.EXPAND\)

## sizer horizontal 3
sizerhor3 = wx.BoxSizer(wx.HORIZONTAL)
sizer2col.Add(txtemail, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
sizerhor3.Add(entraemail, 1, wx.EXPAND)
sizerhor3.Add(txttf1, 0, wx.LEFT|wx.RIGHT|
wx.ALIGN_CENTER_VERTICAL, 5)
sizerhor3.Add(entratf1, 0, wx.EXPAND)
sizerhor3.Add(txttf2, 0, wx.LEFT|wx.RIGHT|
wx.ALIGN_CENTER_VERTICAL, 5)
sizerhor3.Add(entratf2, 1, wx.EXPAND)
sizer2col.Add(sizerhor3, 0, wx.EXPAND)

    sizer2col\.Add\(\(10,10\)\)
    sizer2col\.Add\(\(10,10\)\)
    sizer2col\.Add\(\(10,10\)\)
    sizer2col\.Add\(wx\.StaticLine\(ventana\), 15, wx\.EXPAND|wx\.TOP|

wx.BOTTOM, 5)

    sizer2col\.Add\(\(10,10\)\)
    sizer2col\.Add\(titulo2, 0, wx\.ALIGN\_LEFT|

wx.ALIGN_CENTER_VERTICAL)

    sizer2col\.Add\(txtcolegio, 0, wx\.ALIGN\_RIGHT|

wx.ALIGN_CENTER_VERTICAL)
sizer2col.Add(entracolegio, 0, wx.EXPAND)
sizer2col.Add(txtnumcol, 0, wx.ALIGN_RIGHT|
wx.ALIGN_CENTER_VERTICAL)
sizer2col.Add(entranumcol, 0, wx.EXPAND)

## metemos los textos

## sizer botonera
sizerbot=wx.BoxSizer(wx.HORIZONTAL)
sizer2col.Add((10,10))
sizer2col.Add((10,10))
sizer2col.Add((10,50))
sizerbot.Add((10,10),wx.EXPAND)
sizerbot.Add(botongrabar)
## añadimos el sizer botonera al flexible
sizer2col.Add(sizerbot, 0, wx.EXPAND|wx.BOTTOM, 10)

## añadimos el flexible en el general
sizerpral.Add(sizer2col, 0, wx.EXPAND|wx.ALL, 10)

## ponemos sizer al panel
ventana.SetSizer(sizerpral)
## y al marco, junto con tamaño mínimo
sizer = wx.BoxSizer()
sizer.Add(ventana, 1, wx.EXPAND)
self.SetMinSize((800,600))
## self.SetMaxSize((800,900))

def grabar\(self, event\):
    dialogo=wx\.MessageDialog\(None, &#39;¿Desea Grabar y Salir?&#39;,

'Atención', wx.YES_NO|wx.ICON_QUESTION|wx.STAY_ON_TOP)
respuesta=dialogo.ShowModal()

    if \(respuesta ==wx\.ID\_YES\):
        print &#39;obteniendo valores\.\.\.&#39;
        nombres\_attr = \[&#39;nombre&#39;, &#39;primerapellido&#39;,

'segundoapellido', 'dni', 'direccion', 'restodireccion',
'codigopostal', 'poblacion', 'email', 'telefono1', 'telefono2']
datos_entrados = [entranombre, entraprimerapellido,
entrasegundoapellido, entradni, entradireccion, entrarestodireccion,
entracodigopostal, entrapoblacion, entraemail, entratf1, entratf2]
for m in range(len(datos_entrados)):
cambia_attrib(arbol='usuario', dato=nombres_attr[m],
nuevovalor=datos_entrados[m].value)
print 'guardando...'
guarda_datos('datogral.xml')
print 'guardado'
self.Destroy()
else:
print 'Cancelado'
dialogo.Destroy()

if __name__=='__main__':
aplicacion=MyApp()
aplicacion.MainLoop()

#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x
#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x
#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x
#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x

this is the xml file ... named datogral.xml

<?xml version="1.0" encoding="iso-8859-1"?>
<root>
<persona>
<usuario>
<datos_pesonales>
<nombre>eres un maquina</nombre>
<primerapellido>1apellido usuario</primerapellido>
<segundoapellido>2apellido usuario</segundoapellido>
<dni>su dni</dni>
<direccion>direccion</direccion>
<restodireccion>restodireccion</restodireccion>
<codigopostal>08001</codigopostal>
<poblacion>Madrid</poblacion>
<provincia>madrid</provincia>
<telefono1>555555555</telefono1>
<telefono2>66666666</telefono2>
<email>nom...@dominio.ext</email>
<colegio>Consejo Andaluz: Almería</colegio>
<numerocolegiado>1</numerocolegiado>
</datos_pesonales>
<datosempresa>
<nombreempresa>0</nombreempresa>
<cif>0</cif>
<direccionempresa>direccion</direccionempresa>
<restodireccionempresa>restodireccion</restodireccionempresa>
</datosempresa>
</usuario>
</persona>
</root>

So many thanks... really appreciated.
Now my problem is solved... thnk im gona take a second look to the
OOP :slight_smile:

···

On 30 mar, 13:06, Tom <tcler...@gmail.com> wrote:

Hi,

In your "grabar" function, you're trying to access objects such as
"entranombre".
However, "entranombre" is not an object belonging to your panel.

The way you could do it is e.g.

####################################
#!/usr/bin/python
import wx

class MyApp(wx.App):
def __init__(self):
wx.App.__init__(self, redirect=False)

def OnInit\(self\):
    f = wx\.Frame\(None, \-1, &quot;Frame&quot;\)
    self\.p = wx\.Panel\(f, \-1\)    \#p is a wx\.Panel object belonging

to the MyApp object --> self.p
sizer = wx.BoxSizer(wx.HORIZONTAL)
text = wx.StaticText(self.p, -1, "Name")
self.p.val = wx.TextCtrl(self.p, -1) #val is an object
belonging to self.p
self.p.button = wx.Button(self.p, -1, "OK") #Same for the
other objects
self.p.button.Bind(wx.EVT_BUTTON, self.OnButton)
sizer.Add(text)
sizer.AddSpacer(10)
sizer.Add(self.p.val)
sizer.AddSpacer(10)
sizer.Add(self.p.button)
self.p.SetSizer(sizer)
f.Show()
return True

def OnButton\(self, evt\):
    \#I get access to the object p in the MyApp object \(by using

self.p).
#And within the panel object I have access to the val object
(by using self.p.val).
print self.p.val.GetValue()

if __name__=="__main__":
app = MyApp()
app.MainLoop()
####################################

Best regards,
Tom.

On Mar 30, 12:34 pm, monobot <hector...@gmail.com> wrote:

> Sorry i didnt pated a runnning code ... here it goes:
> at the bottom is the .xml file

> thanks again.

> # -*- coding: cp1252 -*-
> import wx
> import os
> from xml.dom import minidom

> ##Variables globales
> provincias=['Álava','Albacete','Alicante','Almería','Asturias','Ávila','Badajoz','Barcelona','Burgos','Cáceres','Cantabria','Castellón','Ciudad
> Real','Córdoba','Cuenca','Gerona','Granada','Guadalajara','Guipúzcoa','Huelva','Huesca','Islas
> Baleares','Jaén','La Coruña','La Rioja','Las
> Palmas','León','Lérida','Lugo','Madrid','Málaga','Murcia','Orense','Palencia','Pontevedra','Salamanca','S/
> C de
> Tenerife','Segovia','Sevilla','Soria','Tarragona','Teruel','Toledo','Valencia','Valladolid','Vizcaya','Zamora','Zaragoza','Ceuta','Melilla']
> colegios=['Consejo Andaluz: Almería','Consejo Andaluz: Cádiz','Consejo
> Andaluz: Córdoba','Consejo Andaluz: Granada','Consejo Andaluz:
> Huelva','Consejo Andaluz: Jaen','Consejo Andaluz: Málaga','Consejo
> Andaluz: Sevilla','Islas Baleares: Mallorca','Islas Baleares:
> Menorca','Islas Baleares: Eivissa y Formentera','Catalunya:
> Barcelona','Catalunya: Ebro','Catalunya: Girona','Catalunya:
> Lleida','Catalunya: Tarragona','Extremadura','Galicia','Comunidad
> Valenciana: Valencia','Comunidad Valenciana: Alicante','Comunidad
> Valenciana: Castellón','León: León','León: Palencia','León:
> Salamanca','León: Zamora','La
> Rioja','Madrid','Murcia','Asturias','Canarias:
> Fuerteventura','Canarias: Lanzarote','Canarias: Gran
> Canaria','Canarias: Tenerife Gomera y Hierro','Canarias: La
> Palma','Cantabria','Castilla La Mancha: Toledo','Castilla La Mancha:
> Albacete','Castilla La Mancha: Ciudad Real','Castilla La Mancha:
> Cuenca','Castilla La Mancha: Guadalajara','Castilla y León Este:
> Ávila','Castilla y León Este: Burgos','Castilla y León Este:
> Segovia','Castilla y León Este: Soria','Castilla y León Este:
> Valladolid','Vasco Navarro: Vizcaya','Vasco Navarro: Álava','Vasco
> Navarro: Guipúzcoa','Vasco Navarro: Navarra','Aragón:
> Zaragoza','Aragón :Huesca','Aragón: Teruel','Ceuta','Ciudad Autónoma
> de Melilla']
> imagen='./icons/logo.png'

> ##ids de los objetos

> ID_MARCOPRAL=11

> ID_NUEVO=100
> ID_ABRIR=101
> ID_GRABAR=102
> ID_IMPR=103

> ID_USR=301
> ID_GRAL=401

> ID_SI=501
> ID_SU=601
> ID_HE=701
> ID_HS=801

> ID_SALIR=901
> ID_ACERCADE=1001

> ##funciones de manejadores xml
> ##xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

> ##definiendo variables
> arbol_gral = minidom.parse('datogral.xml')

> ##definiendo funciones

> def busqueda_xml (arbol, dato):
> valor = arbol_gral.getElementsByTagName(arbol)
> [0].getElementsByTagName(dato)[0].childNodes[0].nodeValue
> return valor

> def busqueda_3xml (arbol, dato, subdato):
> valor = arbol_gral.getElementsByTagName(arbol)
> [0].getElementsByTagName(dato)[0].getElementsByTagName(subdato)
> [0].childNodes[0].nodeValue
> return valor

> def busqueda_lista (arbol, lista):
> datos=''
> m = lista.split()
> for palabra in m:
> valor = arbol_gral.getElementsByTagName(arbol)
> [0].getElementsByTagName(palabra)[0].childNodes[0].nodeValue
> datos += 'el %s de %s es: ' % (palabra, arbol) + valor +'\n'
> print datos

> def guarda_datos(archivo):
> fichero = open(os.path.realpath(archivo), "w")
> arbol_gral.writexml(fichero, encoding='iso-8859-1')
> fichero.close()
> return True

> def cambia_attrib(arbol, dato, nuevovalor):
> nodo_mod = arbol_gral.getElementsByTagName(arbol)
> [0].getElementsByTagName(dato)[0]
> nodo_mod.childNodes[0].nodeValue = nuevovalor
> print nodo_mod.childNodes[0].nodeValue
> return True

> ## xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

> class MyApp(wx.App):
> def OnInit(self):
> pos=(50,50)
> size=(800,600)
> marco=marcoprincipal('monoBOT CTE', pos, size)
> marco.Show(True)
> marco.Maximize()
> self.SetTopWindow(marco)
> return True

> class marcoprincipal(wx.Frame):
> def __init__(self,title, pos, size):
> marco=wx.Frame.__init__(self,None,ID_MARCOPRAL,title, pos,
> size)

> ## creando el ventana
> ventana = wx.Panel(self)
> ## ventana.SetBackgroundcolour('DarkRed')
> ventana.Show=(True)
> ventana.SetScrollbar(wx.VERTICAL, 0, 10, 20);

> ## creando boton
> botongrabar = wx.Button(ventana, -1, 'Grabar datos',
> size=(150,50))
> self.Bind(wx.EVT_BUTTON, self.grabar, botongrabar)

> ## xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> ## recopilamos la informacion del archivo xml
> nombre_en_fichero = busqueda_xml ('usuario', 'nombre')
> primerapellido_en_fichero = busqueda_xml ('usuario',
> 'primerapellido')
> segundoapellido_en_fichero = busqueda_xml ('usuario',
> 'segundoapellido')
> dni_en_fichero = busqueda_xml ('usuario', 'dni')
> direccion_en_fichero = busqueda_xml ('usuario', 'direccion')
> restodireccion_en_fichero = busqueda_xml ('usuario',
> 'restodireccion')
> codigopostal_en_fichero = busqueda_xml ('usuario',
> 'codigopostal')
> poblacion_en_fichero = busqueda_xml ('usuario', 'poblacion')
> provincia_en_fichero = busqueda_xml ('usuario', 'provincia')
> email_en_fichero = busqueda_xml ('usuario', 'email')
> telefono1_en_fichero = busqueda_xml ('usuario', 'telefono1')
> telefono2_en_fichero = busqueda_xml ('usuario', 'telefono2')

> colegio_en_fichero = busqueda_xml ('usuario', 'colegio')
> numerocolegiado_en_fichero = busqueda_xml ('usuario',
> 'numerocolegiado')
> ## xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

> ## datos generales
> ## fuentemenus = wx.Font(22, wx.MODERN, wx.BOLD, wx.NORMAL)
> titulo1 = wx.StaticText(ventana, -1, "Datos de contacto")
> ## titulo1.SetFont(fuentemenus)

> txtnombre =wx.StaticText(ventana, -1, "Nombre del
> profesional")
> entranombre = wx.TextCtrl(ventana, -1, nombre_en_fichero)
> txtapellido1 =wx.StaticText(ventana, -1, "Primer Apellido")
> entraapellido1 = wx.TextCtrl(ventana, -1,
> primerapellido_en_fichero)
> txtapellido2 =wx.StaticText(ventana, -1, "Segundo Apellido")
> entraapellido2 = wx.TextCtrl(ventana, -1,
> segundoapellido_en_fichero)
> txtdni = wx.StaticText(ventana, -1, "D.N.I.")
> entradni = wx.TextCtrl(ventana, -1, dni_en_fichero)
> txtdirec = wx.StaticText(ventana, -1, "Dirección")
> entradirec = wx.TextCtrl(ventana, -1, direccion_en_fichero)
> entrarestodirec = wx.TextCtrl(ventana, -1,
> restodireccion_en_fichero)
> txtpost = wx.StaticText(ventana, -1, "Código Postal")
> entrapost = wx.TextCtrl(ventana, -1, codigopostal_en_fichero)
> txtpobl = wx.StaticText(ventana, -1, "Población")
> entrapobl = wx.TextCtrl(ventana, -1, poblacion_en_fichero)
> txtprov = wx.StaticText(ventana, -1, "Provincia")
> entraprov = wx.Choice(ventana, -1, choices = provincias)
> entraprov.SetStringSelection(provincia_en_fichero)

> txtemail = wx.StaticText(ventana, -1, "Correo Electrónico")
> entraemail = wx.TextCtrl(ventana, -1, email_en_fichero)
> txttf1 = wx.StaticText(ventana, -1, "Teléfono")
> entratf1 = wx.TextCtrl(ventana, -1, telefono1_en_fichero)
> txttf2 = wx.StaticText(ventana, -1, "Otro Teléfono")
> entratf2 = wx.TextCtrl(ventana, -1, telefono2_en_fichero)
> ## Datos de colegiación
> titulo2 = wx.StaticText(ventana, -1, "Datos de colegiación")
> ## titulo2.SetFont(fuentemenus)
> txtcolegio = wx.StaticText(ventana, -1, "Lugar de
> Colegiación")
> entracolegio = wx.Choice(ventana, -1, choices = colegios)
> entracolegio.SetStringSelection(colegio_en_fichero)
> txtnumcol = wx.StaticText(ventana, -1, "Colegiado")
> entranumcol = wx.TextCtrl(ventana, -1,
> numerocolegiado_en_fichero)

> ## SIZERS
> ## sizer general
> sizerpral = wx.BoxSizer(wx.VERTICAL)

...

leer más »