vistas transitorio modelo estructura diccionario datos campos calculados python callback tkinter

python - estructura - modelo transitorio odoo



¿Por qué se ejecuta el parámetro de botón "comando" cuando se declara? (2)

Esta pregunta ya tiene una respuesta aquí:

Soy nuevo en Python e intento escribir un programa con tkinter. ¿Por qué se ejecuta la función Hello a continuación? Según tengo entendido, la devolución de llamada solo se ejecutará cuando se presione el botón? Estoy muy confundido...

>>> def Hello(): print("Hi there!") >>> hi=Button(frame,text="Hello",command=Hello()) Hi there! >>>


También puede usar una expresión lambda como argumento de comando:

import tkinter as tk def hello(): print("Hi there!") main = tk.Tk() hi = tk.Button(main,text="Hello",command=lambda: hello()).pack() main.mainloop()


Se llama mientras se están asignando los parámetros para Button :

command=Hello()

Si desea pasar la función (no es el valor devuelto), en su lugar debe:

command=Hello

en general function_name es un objeto de función, function_name() es lo que devuelve la función. Vea si esto ayuda aún más:

>>> def func(): ... return ''hello'' ... >>> type(func) <type ''function''> >>> type(func()) <type ''str''>

Si desea pasar argumentos, puede usar una expresión lambda para construir un parámetro invocable.

>>> hi=Button(frame, text="Hello", command=lambda: Goodnight("Moon"))

En pocas palabras, porque Goodnight("Moon") está en una lambda, no se ejecutará de inmediato, en lugar de esperar hasta que se haga clic en el botón.