¿Por qué la función get de Tkinter Entry no devuelve nada?

Resuelto CodingCat asked hace 12 años • 6 respuestas

Estoy intentando utilizar un Entrycampo para obtener entradas manuales y luego trabajar con esos datos.

Todas las fuentes que he encontrado afirman que debería usar la get()función, pero todavía no he encontrado un mini ejemplo sencillo que funcione y no puedo hacerlo funcionar.

Espero que alguien pueda decirme qué estoy haciendo mal. Aquí hay un mini archivo:

from tkinter import *


master = Tk()

Label(master, text="Input: ").grid(row=0, sticky=W)

entry = Entry(master)
entry.grid(row=0, column=1)

content = entry.get()
print(content)  # does not work

mainloop()

Esto me da un Entrycampo que puedo escribir, pero no puedo hacer nada con los datos una vez escritos.

Sospecho que mi código no funciona porque inicialmente entryestá vacío. Pero entonces, ¿cómo accedo a los datos de entrada una vez que se han escrito?

CodingCat avatar May 24 '12 03:05 CodingCat
Aceptado

Parece que puede estar confundido acerca de cuándo se ejecutan los comandos. En su ejemplo, está llamando al getmétodo antes de que la GUI tenga la oportunidad de mostrarse en la pantalla (lo que sucede después de llamar a mainloop.

Intente agregar un botón que llame al getmétodo. Esto es mucho más fácil si escribe su solicitud como clase. Por ejemplo:

import tkinter as tk

class SampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.entry = tk.Entry(self)
        self.button = tk.Button(self, text="Get", command=self.on_button)
        self.button.pack()
        self.entry.pack()

    def on_button(self):
        print(self.entry.get())

app = SampleApp()
app.mainloop()

Ejecute el programa, escriba en el widget de entrada y luego haga clic en el botón.

Bryan Oakley avatar May 23 '2012 23:05 Bryan Oakley

También puedes usar una StringVarvariable, aunque no sea estrictamente necesario:

v = StringVar()

e = Entry(master, textvariable=v)
e.pack()

v.set("a default value")
s = v.get()

Para obtener más información, consulte esta página en effbot.org .

zortacon avatar May 23 '2012 20:05 zortacon

Un ejemplo simple sin clases:

from tkinter import *    
master = Tk()

# Create this method before you create the entry
def return_entry(en):
    """Gets and prints the content of the entry"""
    content = entry.get()
    print(content)  

Label(master, text="Input: ").grid(row=0, sticky=W)

entry = Entry(master)
entry.grid(row=0, column=1)

# Connect the entry with the return button
entry.bind('<Return>', return_entry) 

mainloop()
Marios Theofanidis avatar Sep 12 '2016 15:09 Marios Theofanidis