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

Estoy intentando usar un campo de Entry para obtener una entrada manual y luego trabajar con esos datos.

Todas las fonts que he encontrado afirman que debería usar la función get() , pero aún no he encontrado un mini ejemplo que funcione, y no puedo hacer que funcione.

Espero que alguien me pueda decir lo que 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 campo de Entry que puedo escribir, pero no puedo hacer nada con los datos una vez que se escriben.

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

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

Intenta agregar un botón que llame al método get . Esto es mucho más fácil si escribes tu aplicación como una 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 progtwig, escriba en el widget de entrada, luego haga clic en el botón.

También puede usar una variable StringVar , incluso si no es estrictamente necesario:

 v = StringVar() e = Entry(master, textvariable=v) e.pack() v.set("a default value") s = v.get() 

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

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_entry) mainloop() 

*

 master = Tk() entryb1 = StringVar Label(master, text="Input: ").grid(row=0, sticky=W) Entry(master, textvariable=entryb1).grid(row=1, column=1) b1 = Button(master, text="continue", command=print_content) b1.grid(row=2, column=1) def print_content(): global entryb1 content = entryb1.get() print(content) master.mainloop() 

Lo que hiciste mal no fue ponerlo dentro de una función Definir, entonces no .get usado la función .get con la variable de texto que habías establecido.