Tkinter: AttributeError: NoneEl objeto de tipo no tiene atributo obtener

He creado este GUI simple:

from tkinter import * root = Tk() def grabText(event): print(entryBox.get()) entryBox = Entry(root, width=60).grid(row=2, column=1, sticky=W) grabBtn = Button(root, text="Grab") grabBtn.grid(row=8, column=1) grabBtn.bind('', grabText) root.mainloop() 

Tengo la interfaz de usuario en funcionamiento. Cuando hago clic en el botón Grab , aparece el siguiente error en la consola:

 C:\Python> python.exe myFiles\testBed.py Exception in Tkinter callback Traceback (most recent call last): File "C:\Python\lib\lib-tk\Tkinter.py", line 1403, in __call__ return self.func(*args) File "myFiles\testBed.py", line 10, in grabText if entryBox.get().strip()=="": AttributeError: 'NoneType' object has no attribute 'get' 

¿Qué estoy haciendo mal?

Las funciones de grid , pack y place del objeto Entry y de todos los demás widgets devuelven None . En python cuando haces a().b() , el resultado de la expresión es lo que devuelve b() , por lo tanto, Entry(...).grid(...) devolverá None .

Deberías dividir eso en dos líneas como esta:

 entryBox = Entry(root, width=60) entryBox.grid(row=2, column=1, sticky=W) 

De esa manera, usted obtiene su referencia de Entry almacenada en entryBox y se presenta como espera. Esto tiene un efecto secundario adicional de hacer que su diseño sea más fácil de entender y mantener si recostack todas sus declaraciones de grid y / o pack en bloques.

Cambia esta línea:

 entryBox=Entry(root,width=60).grid(row=2, column=1,sticky=W) 

en estas dos líneas:

 entryBox=Entry(root,width=60) entryBox.grid(row=2, column=1,sticky=W) 

Así como ya lo has hecho correctamente para grabBtn !