python – Tkinter: ¿Por qué sale PY_VAR en Label?

Estoy realizando un GUI en tkinter donde tengo una clase en la que se reciben datos generales de un usuario a través de un Entry con un par de funciones:

  1. Comprobar que todas las letras sean mayúsculas.
  2. Sacar la edad a través de la fecha de nacimiento y comprobar que solo se introduzcan caracteres numéricos.
  3. Validar que la información introducida sea correcta (en caso afirmativo pasa a la siguiente clase)

Finalmente paso la información como argumentos a otra función para usarla mas adelante.

class PaginaDatos(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        
        #Funcion para corroborar que se ingresen caracteres alfabéticos en el nombre y que sean en mayúsculas. 
        def validar_mayuscula(nomApAm_mayuscula):            
            if (nomApAm_mayuscula) == None:
                return False
            checks = () 
            for i, char in enumerate(nomApAm_mayuscula):
                if i in ():
                    checks.append(char == " ", ".") #Por si tiene 2 nombres.
                else:
                    checks.append(char.isupper())
            return all(checks)

        #Funcion para corrobra el ingreso de la fecha de nacimiento con datos numéricos y con 8 dígitos a lo máximo (2 día/2 mes/4 año) y 2 caracteres barra diagonal para separarlos.
        def edad_por_nacimiento(f_nacimiento):
            if len(f_nacimiento) > 10:
                return False
            checks = () 
            for i, char in enumerate(f_nacimiento):
                if i in (2,2) or i in (2, 2) or i in (2, 5):
                    checks.append(char == "/")
                    f_nacimiento_comprobacion= str(f_nacimiento)
                else:
                    checks.append(char.isdecimal())

            #Se comprueba que se tengan los 10 caracteres (8 dígitos y 2 barras diagonales)
                if len(f_nacimiento) == 10:
                    diaActual= datetime.now()
                    diaNacimiento= datetime.strptime(f_nacimiento, "%d/%m/%Y")
                    calculoEdad= (diaActual - diaNacimiento)
                    
                    diferenciaAños= calculoEdad.days / 365
                    diferenciaMeses= calculoEdad.days / 30
                    diferenciaDias= calculoEdad.days
                    
            return all(checks)

#Funcionar para corroborar que los datos introducidos sean correctos. 
        def corroborar_datos(self):
            nomEnt= nombreEntry.get()
            apPatEnt= apellPaterno.get()
            apMatEnt= apellMaterno.get()
            fechNacEnt= fechaNacimiento.get()
            
            verificarDatos= msb.askyesno(title="Verificacion de Datos", 
                         message=(f"¿Datos introducidos correctamente?nn Nombre: {nomEnt}n Apellido Paterno: {apPatEnt}n Apellido Materno: {apMatEnt}n Fecha de Nacimiento: {fechNacEnt}"))
            
                      
        opcionNombre= tk.StringVar()
        tk.Label(self, text= "Nombre").grid(row=1, column=0, sticky="e")
        nombreEntry= tk.Entry(self,
                              textvariable=opcionNombre, 
                              validate="key",
                              validatecommand=(self.register(validar_mayuscula), "%P"))
        nombreEntry.grid(row=1, column=2)
        
        opcionApPat= tk.StringVar()
        tk.Label(self, text= "Apellido Paterno").grid(row=2, column=0, sticky="e")
        apellPaterno= tk.Entry(self,
                               textvariable=opcionApPat,
                               validate="key",
                               validatecommand=(self.register(validar_mayuscula), "%P"))
        apellPaterno.grid(row=2, column=2)

        opcionApMat= tk.StringVar()
        tk.Label(self, text= "Apellido Materno").grid(row=3, column=0, sticky="e")
        apellMaterno= tk.Entry(self,
                               textvariable=opcionApMat, 
                               validate="key",
                               validatecommand=(self.register(validar_mayuscula), "%P"))
        apellMaterno.grid(row=3, column=2)
        
        opcionNacimiento= tk.StringVar()
        tk.Label(self, text= "Fecha de Nacimiento").grid(row=4, column=0, sticky="e")
        fechaNacimiento= tk.Entry(self,
                                  textvariable=opcionNacimiento,
                                  validate="key",
                                  validatecommand=(self.register(edad_por_nacimiento), "%P"))
        fechaNacimiento.grid(row=4, column=2)
        
        botonGuardarDatos= tk.Button(self, 
                                     text="Guardar",
                                    command=lambda: corroborar_datos(self))
        botonGuardarDatos.grid(row=7, column=0, columnspan=3)
        
        self.obtener_informacion(opcionNombre, opcionApPat, opcionApMat, opcionNacimiento)

    def obtener_informacion(self, nombre, aP, aM, fN):
        self.nombre= nombre
        self.apPa= aP
        self.apMa= aM
        self.feNa= fN
        
        return (self.nombre, self.apPa, self.apMa, self.feNa)

Posteriormente…

  1. Creo una instancia de la clase anterior
  2. Accedo a los atributos de la función de los datos introducidos.
  3. Creo unos Labels donde deben aparecer los datos introducidos anteriormente pero lo que me pone es PY_VAR y un numero.
class PaginaConciencia(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        tk.Frame.configure(self)

        datos= PaginaDatos(self)
        
        titulo= tk.Label(self, 
                         text= "Pagina Ejemplo")
        titulo.grid(row=0, column=0, columnspan=3)
        
        tk.Label(self, text=datos.nombre).grid(row=1, column=0)
        tk.Label(self, text=datos.apPa).grid(row=1, column=1)
        tk.Label(self, text=datos.apMa).grid(row=1, column=3)
        tk.Label(self, text=datos.feNa).grid(row=1, column=3)

No entiendo que esta succediendo.

¡Muchas gracias por su orentacion!