python - how - ¿Por qué la función get de Tkinter Entry no devuelve nada?
size entry tkinter (4)
Parece que puede estar confundido en cuanto a cuándo se ejecutan los comandos. En su ejemplo, está llamando al método get
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 método get
. Esto es mucho más fácil si escribe su aplicación 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.
Intento usar un campo de Entry
para obtener una entrada manual y luego trabajar con esa información.
Todas las fuentes que he encontrado afirman que debo usar la función get()
, pero aún no he encontrado un mini ejemplo que funcione, y no puedo hacerlo funcionar.
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 tipear, pero no puedo hacer nada con los datos una vez que están escritos.
Sospecho que mi código no funciona porque inicialmente, la entry
está vacía. Pero entonces, ¿cómo puedo acceder a los datos de entrada una vez que se han ingresado?
También podría 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 obtener más información, consulte esta página en effbot.org .
lo que podrías hacer es
from tkinter import *
master = Tk()
entryb1 = StringVar
Label(master, text="Input: ").grid(row=0, sticky=W)
entry = Entry(master, textvariable=entryb1)
entry.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 habías usado la función ".get" con la variable de texto que habías establecido
Un simple ejemplo 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()