Python tkinter devuelve el valor de la función utilizada en el comando

¿Cómo obtengo el valor de retorno A a C? No estoy usando clase por cierto.

def button: mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) A = B.get() return A B = StringVar() C = "" myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) Submit = Button(myGui, text = "Submit", command = button).grid(row = 1, column = 1) 

Respuesta corta: no puedes. Las devoluciones de llamada no pueden devolver nada porque no hay ningún lugar para devolverlo, excepto el bucle de eventos, que no hace nada con los valores de retorno.

En una aplicación basada en eventos, lo que normalmente hará es establecer un atributo en una clase. O, si eres un principiante, puedes establecer una variable global. El uso de una variable global no es una buena idea para el código real que debe mantenerse a lo largo del tiempo, pero está bien para la experimentación.

Entonces, por ejemplo, dado que C parece ser una variable global en tu ejemplo, harías algo como:

 def button(): global C mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) A = B.get() C = A 

Puedes llamar a C.set desde la función del button :

 def button: mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) A = B.get() C.set(A) # return A # return values are useless here 

Es fácil simplemente declarar A a global.

 def button: global A mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) A = B.get() return A B = StringVar()` C = "" myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) Submit = Button(myGui, text = "Submit", command = button).grid(row = 1, column = 1) # and then A is not empty B= A 

Antigua pregunta, pero la mayoría de las respuestas sugieren una variable global. No me gusta usar demasiadas variables globales en mis proyectos, así que aquí está mi solución.

Al declarar su botón Tkinter, puede usar una función lambda como comando. Esta lambda puede interactuar con variables que se encuentran dentro del mismo espacio de nombres que el botón que está definiendo. Asegúrese de definir esta variable antes de inicializar el botón.

 def button(): mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) A = B.get() return A B = StringVar() C = "" myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) Submit = Button(myGui, text = "Submit", command = lambda: C=button()).grid(row = 1, column = 1) 

Es posible que deba tener self como argumento para el button dependiendo de la organización de su proyecto, pero el concepto es el mismo. Los comandos Lambda también son útiles para pasar argumentos al comando de botón.

Crea una clase secundaria de Tkinter.Tk y define una variable miembro self.A en esa clase. Entonces puedes imitar el comportamiento de retorno

 self.A = B.get() 

Consulte, Valores de retorno de entrada de texto Tkinter, cierre GUI