I get an error when I try to dynamically assign a dictionary to Selector.objects.
Is there any way to dynamically change the choices while keeping the display name and internal values?
I tried the following two methods, but each resulted in a different error.
param version: 1.13.0
import param
class App(param.Parameterized):
selector = param.Selector()
def update_selector(self):
self.param.selector.objects = {
"0:None": None, "1:One": "one", "2:Two": "two", "3:Three": "three"}
self.selector = "one"
app = App()
app.update_selector()
Error message1
AttributeError Traceback (most recent call last)
in
9
10 app = App()
—> 11 app.update_selector()
in update_selector(self)
6 def update_selector(self):
7 self.param.selector.objects = {“0:None”: None, “1:One”: “one”, “2:Two”: “two”, “3:Three”: “three”}
----> 8 self.selector = “one”
9
10 app = App()
/xxx/lib/python3.8/site-packages/param/parameterized.py in _f(self, obj, val)
365 instance_param = getattr(obj, ‘_instance__params’, {}).get(self.name)
366 if instance_param is not None and self is not instance_param:
→ 367 instance_param.set(obj, val)
368 return
369 return f(self, obj, val)
/xxx/lib/python3.8/site-packages/param/parameterized.py in _f(self, obj, val)
367 instance_param.set(obj, val)
368 return
→ 369 return f(self, obj, val)
370 return _f
371
/xxx/lib/python3.8/site-packages/param/parameterized.py in set(self, obj, val)
1199 val = self.set_hook(obj,val)
1200
→ 1201 self._validate(val)
1202
1203 _old = NotImplemented
/xxx/lib/python3.8/site-packages/param/init.py in _validate(self, val)
1297 “”"
1298 if not self.check_on_set:
→ 1299 self._ensure_value_is_in_objects(val)
1300 return
1301
/xxx/lib/python3.8/site-packages/param/init.py in _ensure_value_is_in_objects(self, val)
1330 “”"
1331 if not (val in self.objects):
→ 1332 self.objects.append(val)
1333
1334 def get_range(self):
AttributeError: ‘dict’ object has no attribute ‘append’
import param
class App(param.Parameterized):
selector = param.Selector(objects = {"0:None": None})
def update_selector(self):
self.param.selector.objects = {
"0:None": None, "1:One": "one", "2:Two": "two", "3:Three": "three"}
self.selector = "one"
app = App()
app.update_selector()
Error message2
ValueError Traceback (most recent call last)
in
9
10 app = App()
—> 11 app.update_selector()
in update_selector(self)
6 def update_selector(self):
7 self.param.selector.objects = {“0:None”: None, “1:One”: “one”, “2:Two”: “two”, “3:Three”: “three”}
----> 8 self.selector = “one”
9
10 app = App()
/xxx/lib/python3.8/site-packages/param/parameterized.py in _f(self, obj, val)
365 instance_param = getattr(obj, ‘_instance__params’, {}).get(self.name)
366 if instance_param is not None and self is not instance_param:
→ 367 instance_param.set(obj, val)
368 return
369 return f(self, obj, val)
/xxx/lib/python3.8/site-packages/param/parameterized.py in _f(self, obj, val)
367 instance_param.set(obj, val)
368 return
→ 369 return f(self, obj, val)
370 return _f
371
/xxx/lib/python3.8/site-packages/param/parameterized.py in set(self, obj, val)
1199 val = self.set_hook(obj,val)
1200
→ 1201 self._validate(val)
1202
1203 _old = NotImplemented
/xxx/lib/python3.8/site-packages/param/init.py in _validate(self, val)
1320 break
1321 items = ‘[’ + ', '.join(items) + limiter
→ 1322 raise ValueError("%s not in parameter%s’s list of possible objects, "
1323 “valid options include %s” % (val, attrib_name, items))
1324
ValueError: one not in parameter selector’s list of possible objects, valid options include [0:None, 1:One, 2:Two, 3:Three]