# Event handlers in PyScript PyScript offer two ways to subscribe to Javascript event handlers: ## Subscribe to event with `py-*` attributes The value of the attribute contains python code which will be executed when the event is fired. A very common pattern is to call a function which does further work, for example: ```html ``` ```python def say_hello_no_param(): print("Hello!") def say_hello_with_param(name): print("Hello " + name + "!") ``` Note that py-\* attributes need a _function call_ Supported py-\* attributes can be seen in the [PyScript API reference](<[../api-reference.md](https://github.com/pyscript/pyscript/blob/66b57bf812dcc472ed6ffee075ace5ced89bbc7c/pyscriptjs/src/components/pyscript.ts#L119-L260)>). ## Subscribe to event with `addEventListener` You can also subscribe to an event using the `addEventListener` method of the DOM element. This is useful if you want to pass event object to the event handler. ```html ``` ```python from js import console, document from pyodide.ffi.wrappers import add_event_listener def hello_args(*args): console.log(f"Hi! I got some args! {args}") add_event_listener(document.getElementById("two"), "click", hello_args) ``` or using the `addEventListener` method of the DOM element: ```html ``` ```python from js import console, document from pyodide.ffi import create_proxy def hello_args(*args): console.log(f"Hi! I got some args! {args}") document.getElementById("three").addEventListener("click", create_proxy(hello_args)) ``` or using the PyScript Element class: ```html ``` ```python from js import console from pyodide.ffi import create_proxy def hello_args(*args): console.log(f"Hi! I got some args! {args}") Element("four").element.addEventListener("click", create_proxy(hello_args)) ``` ## JavaScript to PyScript and From PyScript to JavaScript If you're wondering about how to pass objects from JavaScript to PyScript and/or the other way around head over to the [Passing Objects](passing-objects.md) page. ### Exporting all Global Python Objects We can use our new `createObject` function to "export" the entire Python global object dictionary as a JavaScript object: ```python from js import createObject from pyodide.ffi import create_proxy createObject(create_proxy(globals()), "pyodideGlobals") ``` This will make all Python global variables available in JavaScript with `pyodideGlobals.get('my_variable_name')`. (Since PyScript tags evaluate _after_ all JavaScript on the page, we can't just dump a `console.log(...)` into a ` ``` ### Exporting Individual Python Objects We can also export individual Python objects to the JavaScript global scope if we wish. (As above, the following example uses a button to delay the execution of the ` ```