File: looper.enaml

package info (click to toggle)
python-enaml 0.19.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 13,284 kB
  • sloc: python: 31,443; cpp: 4,499; makefile: 140; javascript: 68; lisp: 53; sh: 20
file content (52 lines) | stat: -rw-r--r-- 1,849 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#------------------------------------------------------------------------------
# Copyright (c) 2013-2025, 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 of using Looper to generate widgets from an iterable.

<< autodoc-me >>
"""
from __future__ import print_function
from enaml.core.api import Looper
from enaml.layout.api import vbox, hbox, align
from enaml.widgets.api import (
    Window, Container, Label, Field, PushButton, ScrollArea, Slider, Html,
)


enamldef Main(Window):
    Container:
        constraints = [
            vbox(
                hbox(label, field),
                button,
                scroller,
            ),
            align('v_center', label, field),
        ]
        Label: label:
            text = 'Items'
        Field: field:
            text = 'foo bar baz spam ham'
        PushButton: button:
            text = 'Print Items'
            clicked ::
                for item in looper.items:
                    print(item)
        ScrollArea: scroller:
            Container:
                # Note that a Looper expects to iterate over unique values.
                # Passing duplicate values can lead to crashes.
                Looper: looper:
                    iterable << field.text.split()
                    Field:
                        placeholder = 'Field %d: %s' % (loop.index, loop.item)
                    PushButton:
                        text = 'pb %s' % loop.index
                    Slider:
                        value :: print('Slider %d changed' % loop.index)
                    Html:
                        source << '<h1><center>%s</center></h1>' % loop.item