Crash using loopers

21 views
Skip to first unread message

Till Stensitzki

unread,
Jan 21, 2021, 4:52:26 PM1/21/21
to Enaml
The following example crashs and i do not understand what is happen:

class SubModel(Atom):
    n = Int(0)
    x = List(int)

    def update(self):
        self.x = [self.n, 23]
        self.n += 1

class Model(Atom):
    l = List(SubModel)

model = Model(l=[SubModel(x=[1,2,3])])

enamldef SubModelView(Container):
    attr sm
    Looper:
        iterable << sm.x
        Label:
            text << str(loop.item)

enamldef Main(MainWindow):
    attr model = model
    attr x = 1
    Looper:
        iterable << model.l
        SubModelView:
            sm = loop.item

    func update():
        for m in model.l:
            m.update()

    Timertimer:
        interval = 200
        single_shot = False
        timeout :: deferred_call(update)

    activated ::
        timer.start()

Traceback (most recent call last):
  File "C:\Users\tills\miniconda3\envs\skultrafast\lib\site-packages\enaml\qt\q_deferred_caller.py", line 42, in customEvent
    event.callback(*event.args, **event.kwargs)
  File "bug.enaml", line 37, in update
    m.update()
  File "bug.enaml", line 12, in update
    self.x = [self.n, 2, 3]
  File "C:\Users\tills\miniconda3\envs\skultrafast\lib\site-packages\enaml\core\standard_tracer.py", line 55, in __call__
    engine.update(owner, self.name)
  File "C:\Users\tills\miniconda3\envs\skultrafast\lib\site-packages\enaml\core\expression_engine.py", line 241, in update
    setattr(owner, name, pair.reader(owner, name))
  File "C:\Users\tills\miniconda3\envs\skultrafast\lib\site-packages\enaml\core\looper.py", line 127, in _observe_iterable
    self.refresh_items()
  File "C:\Users\tills\miniconda3\envs\skultrafast\lib\site-packages\enaml\core\looper.py", line 159, in refresh_items
    old_items.remove(iteration)
ValueError: list.remove(x): x not in list

help appricated,
Till
Reply all
Reply to author
Forward
0 new messages