Declare Function Example
An example which demonstrates the use of the func
keyword.
Code in the body of the function has access to the same scope as a bound
expression. This consists of an implicity self
which resolves to the
object on which the function was declared, as well as the identifiers
declared in the enclosing enamldef
block. It also has access to the
dynamic scope which is rooted on self
.
Tip
To see this example in action, download it from
declare_function
and run:
$ enaml-run declare_function.enaml
Screenshot
Example Enaml Code
#------------------------------------------------------------------------------
# Copyright (c) 2015-2024, Nucleic Development Team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file LICENSE, distributed with this software.
#------------------------------------------------------------------------------
""" An example which demonstrates the use of the `func` keyword.
Code in the body of the function has access to the same scope as a bound
expression. This consists of an implicity `self` which resolves to the
object on which the function was declared, as well as the identifiers
declared in the enclosing `enamldef` block. It also has access to the
dynamic scope which is rooted on `self`.
<< autodoc-me >>
"""
from __future__ import print_function
from collections.abc import Mapping
from enaml.widgets.api import Window, PushButton, SpinBox, Container
from enaml.core.funchelper import call_func
enamldef Main(Window): m:
func do_thing(param):
i = 0
a = 1
print({a: self for i in range(3)})
print({m for m in range(1)})
print([[i for i in range(1)] for i in range(2)])
print([m for i in range(3) if i == m])
print('Index', i)
Container:
SpinBox: sbox:
maximum = 100
minimum = 0
PushButton:
text = 'Click Me'
clicked ::
do_thing(1)
print('Bis')
print({a: self for i in range(3)})
print({m for m in range(1)})
print([[i for i in range(1)] for i in range(2)])
print([m for i in range(3) if i == m])
print('Index', i)