Discussion:
guidata : construct a DataSet dynamically
Samuel Garcia
2012-02-10 09:29:55 UTC
Permalink
Dear guidata list,

in guidata the way to construct a DataSet is declarative:

class MyParam(DataSet):
a = FloatItem("a float", default=2.3)
b = IntItem("an int",default=5)
p = MyParam()


Is there a way to construct it dynamically ?
This (unfortunately) do not work :

class MyParam(DataSet):
pass
for i in range(20):
name = 'param{}'.format(i)
if i%2:
item = FloatItem(name, default=2.3)
else:
item = IntItem(name, default=5)
setattr(MyParam, name, item)
p = MyParam()



Thanks a lot to help me.


Samuel
Carlos Pascual
2012-02-10 15:00:20 UTC
Permalink
I am interested in that too...

I tried with:

+++++++++++++++++++++++++++++++
class MyDataSet(DataSet):
def __init__(self,*a,**kw):
for i in range(5):
setattr(self,"p%i"%i,FloatItem("par%i",default=i*3))
DataSet.__init__(self,*a,**kw)
++++++++++++++++++++++++++++++

But it didn't work, either.
Post by Samuel Garcia
Dear guidata list,
a = FloatItem("a float", default=2.3)
b = IntItem("an int",default=5)
p = MyParam()
Is there a way to construct it dynamically ?
pass
name = 'param{}'.format(i)
item = FloatItem(name, default=2.3)
item = IntItem(name, default=5)
setattr(MyParam, name, item)
p = MyParam()
Thanks a lot to help me.
Samuel
--
+----------------------------------------------------+
Carlos Pascual Izarra
Scientific Software Coordinator
Computing Division
Cells / Alba Synchrotron [http:/www.cells.es]
Carretera BP 1413 de Cerdanyola-Sant Cugat, Km. 3.3
E-08290 Cerdanyola del Valles (Barcelona), Spain
E-mail: cpascual-***@public.gmane.org
Phone: +34 93 592 4428
+----------------------------------------------------+
Uwe Schmitt
2012-02-10 09:52:45 UTC
Permalink
Hi,

you have to use type() to create a class on-the-fly as follows:

import guidata
import guidata.dataset.datatypes as dt
import guidata.dataset.dataitems as di

items = {
    "a" : di.IntItem("a"),
    "b" : di.FloatItem("b")
}
clz = type("Dialog", (dt.DataSet,), items)

app = guidata.qapplication()
dlg = clz()
dlg.edit()

Regards, Uwe
Post by Samuel Garcia
Dear guidata list,
     a = FloatItem("a float", default=2.3)
     b = IntItem("an int",default=5)
p = MyParam()
Is there a way to construct it dynamically ?
     pass
     name = 'param{}'.format(i)
         item = FloatItem(name, default=2.3)
        item = IntItem(name, default=5)
     setattr(MyParam, name, item)
p = MyParam()
Thanks a lot to help me.
Samuel
Samuel Garcia
2012-02-21 12:40:23 UTC
Permalink
Of course!
Oh thank you.
Post by Uwe Schmitt
Hi,
import guidata
import guidata.dataset.datatypes as dt
import guidata.dataset.dataitems as di
items = {
"a" : di.IntItem("a"),
"b" : di.FloatItem("b")
}
clz = type("Dialog", (dt.DataSet,), items)
app = guidata.qapplication()
dlg = clz()
dlg.edit()
Regards, Uwe
Post by Samuel Garcia
Dear guidata list,
a = FloatItem("a float", default=2.3)
b = IntItem("an int",default=5)
p = MyParam()
Is there a way to construct it dynamically ?
pass
name = 'param{}'.format(i)
item = FloatItem(name, default=2.3)
item = IntItem(name, default=5)
setattr(MyParam, name, item)
p = MyParam()
Thanks a lot to help me.
Samuel
Sadique Sheik
2012-12-02 13:43:47 UTC
Permalink
Awesome. you just changed my life !! ;)
Post by Uwe Schmitt
Hi,
import guidata
import guidata.dataset.datatypes as dt
import guidata.dataset.dataitems as di
items = {
"a" : di.IntItem("a"),
"b" : di.FloatItem("b")
}
clz = type("Dialog", (dt.DataSet,), items)
app = guidata.qapplication()
dlg = clz()
dlg.edit()
Regards, Uwe
Post by Samuel Garcia
Dear guidata list,
a = FloatItem("a float", default=2.3)
b = IntItem("an int",default=5)
p = MyParam()
Is there a way to construct it dynamically ?
pass
name = 'param{}'.format(i)
item = FloatItem(name, default=2.3)
item = IntItem(name, default=5)
setattr(MyParam, name, item)
p = MyParam()
Thanks a lot to help me.
Samuel
Loading...