elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  tkinter AttributeError: 'NoneType' object has no attribute 'get'
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: tkinter AttributeError: 'NoneType' object has no attribute 'get'  (Leído 7,024 veces)
PUAROT

Desconectado Desconectado

Mensajes: 86



Ver Perfil WWW
tkinter AttributeError: 'NoneType' object has no attribute 'get'
« en: 5 Octubre 2016, 23:01 pm »

Tengo un problema que no soy capaz de resolver por que no lo entiendo.

Cuando intento utilizar atributos de un objeto que según la documentación de tkinter posee dicho objeto me sale el error AttributeError: 'NoneType' object has no attribute

Me ha pasado intentado poner el foco en un Entry por ejemplo y de lo unico que me he dado cuenta después de buscar por internet ejemplos de utilización, es que cuando sitúas un elemento en una posición con place(x,y) no me funciona, sin embargo al utilizar el .pack() si No lo entiendo, yo quiero diseñar la aplicación diciendo exactamente donde quiero las cosas.

Como no se si me he explicado bien, aquí pongo un ejemplo muy sencillo del problema :
 
Este código funciona:

Código:
from tkinter import *
 
root = Tk()
root.geometry("640x490")
 
label = Label(root, text='Entrada').place(x=20,y=210)
entry = Entry(root)
button = Button(root, text="Presioname")
button.pack()
entry.pack()

def funcion():
    print (entry.get())
   
button.config(command=funcion)
 
root.mainloop()

y este no:

Código:
from tkinter import *
 
root = Tk()
root.geometry("640x490")
 
label = Label(root, text='Entrada').place(x=20,y=210)
entry = Entry(root).place(x=80,y=210)
button = Button(root, text="Presioname")
button.pack()
 
def funcion():
    print (entry.get())
   
button.config(command=funcion)
 
root.mainloop()


En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: tkinter AttributeError: 'NoneType' object has no attribute 'get'
« Respuesta #1 en: 6 Octubre 2016, 11:25 am »

modifiqué apenas tu código que no anda:
Código
  1. from tkinter import *
  2.  
  3. root = Tk()
  4. root.geometry("640x490")
  5. texto=StringVar()  #hay que iniciar una variable para el texto en este caso
  6. label = Label(root, text='Entrada').place(x=20,y=210)
  7. entry = Entry(root,textvariable=texto).place(x=80,y=210)  #uno(enlazo) esa variable con el entry
  8. button = Button(root, text="Presioname")
  9. button.pack()
  10.  
  11. def funcion():
  12.    print (texto.get())   #ahora obtengo lo que tiene la variable texto
  13.  
  14. button.config(command=funcion)
  15.  
  16. root.mainloop()
  17.  

perdón pero no has buscado lo suficiente sobre get y set de los entry.


En línea

PUAROT

Desconectado Desconectado

Mensajes: 86



Ver Perfil WWW
Re: tkinter AttributeError: 'NoneType' object has no attribute 'get'
« Respuesta #2 en: 6 Octubre 2016, 12:11 pm »

Ante todo muchas gracias por contestar !!!c

Tienes razón en que no he buscado mucho sobre get y set , pero es por que no se exactamente como buscar para el problema que tengo, me explico mejor...

Mi problema no es que no funcionara el código que has arreglado con explicación incluida, (cosa que agradezco) Este era solo un ejemplo ya que el problema no es get o set, si no que no me deja aplicar esos y otros atributos .
En el código que estoy haciendo donde me surge el problema, tengo un entry con su variable Stringvar asociada y me funciona el get perfectamente,,pero si intento aplicarle el focus() osea que al abrir la aplicación este el foco sobre esa caja de texto me da el mismo error, también tengo un botón al cual he intentado aplicar un bind para asociuar una tecla a dicho botón y también me da el m mismo error

En este ejemplo se ha solucionado poniendo un Strinvar asociado al Entry para usar un get, pero que pasa si le intento poner el foco a la caja de texto ? da error, lo mismo que si lo intento al botón (usando place)

Si en tu código aplico button.focus() funciona perfectamente, pero si ese boton en lugar de estar situado con el button.pack() lo situas con .place(x=20,y=50) ya no funciona el focus y da el error que comento...

Es un poco engorroso de explicar y no se si me he explicado bien cual es el problema, lo que esta claro es que no se por donde buscar.

Gracias otra vez y si no me he explicado bien pongo otro ejemplo
 
En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: tkinter AttributeError: 'NoneType' object has no attribute 'get'
« Respuesta #3 en: 6 Octubre 2016, 15:46 pm »

a ver si es algo así aplicado a este mismo ejemplo:
Código
  1. from tkinter import *
  2.  
  3. root = Tk()
  4. root.geometry("640x490")
  5. texto=StringVar()
  6. label = Label(root, text='Entrada').place(x=20,y=210)
  7. entrada= Entry(root,textvariable=texto)  # acá esta la diferencia en la declaración! creo la   instancia solamente, así después puedo aplicarle los métodos, place , focus, etc.
  8. entrada.place(x=80,y=210)
  9. entrada.focus()
  10. button = Button(root, text="Presioname")
  11. button.pack()
  12.  
  13. def funcion():
  14.    print (texto.get())
  15.  
  16. button.config(command=funcion)
  17.  
  18. root.mainloop()
  19.  
  20.  

dicho sea de paso, tk sirve para empezar, pero cuando necesites algo más profesional te recomiendo pyqt y si vas a aprender de 0 empezá por la versión 5 directamente.
« Última modificación: 6 Octubre 2016, 15:50 pm por tincopasan » En línea

PUAROT

Desconectado Desconectado

Mensajes: 86



Ver Perfil WWW
Re: tkinter AttributeError: 'NoneType' object has no attribute 'get'
« Respuesta #4 en: 7 Octubre 2016, 21:56 pm »

Pues si, se soluciona!!! no se me hubiera ocurrido que así se solucionase, es muy curioso el problema y la solución, o al menos a mi me lo parece :-D

Lo que aprende uno por aquí jeje Muchas gracias !!!!

Respecto a lo de pyqt lo he pensado y mirado, de hecho tengo guardados en favoritos algo de documentación para cuando pueda empezar... tengo Mac con Maverics y no me deja instalarlo, tengo pendiente hacer copia de seguridad y actualizar el SO, entonces empezaré a mirarlo.
Ya que estamos, una pregunta mas  una vez desarrolle alguna aplicación con pyqt y python, para ejecutar esa aplicación en un pc tiene que estar instalado python y pyqt? hay formas de crear un ejecutable para ejecutar dicha aplicación en cualquier pc?  conozco py2exe, pero no se si valdría...
 
En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: tkinter AttributeError: 'NoneType' object has no attribute 'get'
« Respuesta #5 en: 9 Octubre 2016, 04:29 am »

si se puede compilar un exe, tanto con py2exe como con cx_freeze para sistemas windows, con repecto a otros SO no tengo la menor idea ya que no los uso.
En línea

PUAROT

Desconectado Desconectado

Mensajes: 86



Ver Perfil WWW
Re: tkinter AttributeError: 'NoneType' object has no attribute 'get'
« Respuesta #6 en: 10 Octubre 2016, 19:43 pm »

Muchas gracias !! como ya comenté, gracias a su ayuda terminé la aplicación (básica, pero que me resuelve una necesidad:-) ) ademas de aprender cosas nuevas, esta aplicación me ha servido para aprender bastante, lo cual significa que tengo que seguir escribiendo código para seguir aprendiendo.

No se si crear un hilo nuevo para esto, pero tengo otra cuestion, espero no ser muy pesado

Respecto a py2exe, ya lo había utilizado en mis primeros códigos escritos para interactuar por la consola, sin mayores problemas, pero al tener una interface gráfica con tkinter no soy capaz de generar un exe sin añadidos, osea, que este todo en el exe

Me explico, o eso intentaré...

con un archivo setup.py como este :
Código:
from distutils.core import setup
from tkinter import *
import py2exe
import sys
import os

sys.argv.append('py2exe')

setup(name="Prueba",
 version="2.0",
 description="prueba de py2exe.",
 author="",
 author_email="",
 url="",
 license="libre de uso con reconocimiento",
 scripts=["prueba.py"],
 console=[{"script": "prueba.py", "icon_resources": [(1, "icon.ico")]}],
 options={"py2exe": {"bundle_files": 1}},
 windows=[{'script':"prueba.py"}],
 

me dice :
running py2exe
running build_scripts
copying prueba.py -> build\scripts-3.4

3 missing Modules
------------------
? readline imported from cmd, code, pdb
? win32api imported from platform
? win32con imported from platform
OOPS: tkinter 2

si pongo el "bundle_files" a 2 en lugar de uno, me genera carpetas y archivos mas el exe, pero el exe no funciona como debería, varias funciones de la aplicación no funcionan

He estado buscando por internet, y lo que he entendido es que debe existir una forma de crear un solo archivo pero yo no doy con ella y que con el "bundle_files" a 2 tendrioa yo que copiar ciertos archivos de los que me genera a sus carpetas correspondientes o eso me parece interpretar
Si la única opción es ponerlo a 2 y que genere todos los archivos, ¿hay forma de automatizar que esos archivos se copien en el lugar adecuado?
Hay mas opciones?

Gracias otra vez
En línea

PUAROT

Desconectado Desconectado

Mensajes: 86



Ver Perfil WWW
Re: tkinter AttributeError: 'NoneType' object has no attribute 'get'
« Respuesta #7 en: 16 Octubre 2016, 10:23 am »

He conseguido crear un exe (con sus añadidos) que funcione con cx_freeze y el siguiente setup.py
Código:
import sys
from cx_Freeze import setup, Executable
base = None
if sys.platform == 'win32':
    base = 'Win32GUI'
options = {
    'build_exe': {
        'compressed': False,
        'includes': ['Funciones_conversion']
    }
}


executables = [
    Executable('archivo.py', base=base)
]

setup(name='archivo',
      version='2',
      description='Prueba.',
      executables=executables,
      options=options
      )

Ahora me falta probar con py2exe a ver que tal va, ya que he empeado a enterarme de como va  cx_freeze
Uno de los problemas para que no funcionara bien, he descubierto que es al importar el modulo Tkinter, yo tenia:
Código:
from tkinter import*
y he tenido que hacer algunos mas del estilo :
Código:
from tkinter import filesistem
para que funcione el codigo completo.
Con esto ya tengo una carpeta con todos sus archivos añadidos en la que está el ejecutable y al cambiar la carpeta de ordenador, FUNVIONA! !!

Aun así me gustaría saber si cabe la posibilidad de crear un archivo único.

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con tkinter « 1 2 »
Scripting
elhacker_carlos 14 7,721 Último mensaje 4 Julio 2011, 23:18 pm
por elhacker_carlos
Necesito ayuda sobre. OBJECT& operator= (const OBJECT& right)
Programación C/C++
anonimo12121 6 3,451 Último mensaje 25 Agosto 2012, 18:52 pm
por anonimo12121
Object reference not set to an instance of an object.
.NET (C#, VB.NET, ASP)
jaxoR 1 2,096 Último mensaje 17 Mayo 2015, 00:25 am
por kub0x
[Python3 + tkinter] Ayuda ventanas en cascada tkinter
Scripting
darkweb64 2 3,642 Último mensaje 11 Diciembre 2015, 18:04 pm
por darkweb64
Formatear texto de attribute style
Desarrollo Web
**Aincrad** 1 2,176 Último mensaje 27 Mayo 2022, 13:06 pm
por MinusFour
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines