On Thu, 2003-09-04 at 17:09, Lorenzo Gil Sanchez wrote:
> Hi,
> 
> I'm trying to understand how to create a custom subclass of
> gobject.GObject and now I'm working with the properties stuff:
> 
> import pygtk
> pygtk.require('2.0')
> import gobject
> 
> class MyObject(gobject.GObject):
>     
>     __gproperties__ = {
>         'prop_name' : (gobject.TYPE_STRING, 'short_description',
>                        'long_description', 'initial_value',
>                        gobject.PARAM_READABLE)
>         }
> 
>     def __init__(self):
>         self.__gobject_init__()
>         self.prop_name = 'initial_value'  # [1]
> 
>     def do_get_property(self, pspec):
>         if pspec.name == 'prop-name':  # [2]
>             return self.prop_name
>         else:
>             raise AttributeError, 'unknown property %s' % pspec.name
> 
>     def do_set_property(self, pspec, value):
>         if pspec.name == 'prop-name':
>             self.prop_name = value
>         else:
>             raise AttributeError, 'unknown property %s' % pspec.name
>         
> gobject.type_register(MyObject)
> 
> print 'MyObject properties:', gobject.list_properties(MyObject)
> o1 = MyObject()
> print o1.get_property('prop-name')
> o1.set_property('prop-name', 'other value')  # [3]
> print o1.get_property('prop-name')
> 
> 
> And here are my questions:
> 
> [1] No matter if I create a gobject property I still need to create a
> Python property to 'hold' the actual data. Is this correct?
> 
> [2] If my property is called prop_name, PyGTK internally converts it to
> prop-name so if I do o1.get_property('prop_name') I get an error. If I
> have to create a instance variable like self.prop_name I can't create
> code that make this two sentences equivalent:
> 
> print o1.prop_name
> print o1.get_property('prop_name')  # this raises an error
> 
> [3] If I have set the flags for the property as gobject.PARAM_READABLE
> why this statement is not raising an error or even a warning?:
> 
> o1.set_property('prop-name', 'other value')
> 
> Do I have to take this in consideration when writing the do_set_property
> method?
> 
> 
> I don't know if I'm doing it right but so far I don't find gobjects
> properties very useful when using them from Python. And I think what
> people actually dislikes most is the fact that you have to call
> gobject.type_register with your class, which is pretty ok with me.

Hi Lorenzo,

I probably do not have the required PyGTK experience to give you
a full correct answer, but I think GObject Properties system is
usefull in Python: The reason: whenever a property value changes
from value, the notify signal is emitted. You can also "listen"
to specific properties becase the detail of the notify signal is
set to the name of the property. Also, using GObject properties
you are being consistent with e.g. Gtk Widgets ...

Question to answer [1] : In C it mostly not any different. Properties
are usefull because it's a generic system, it allow runtime
introspection, it emits notify signals, etc ...

Question [2] en [3] are to PyGtk specific to me :-)

Hope this helps

> Cheers
> Lorenzo Gil Sanchez
> 
Steven
> _______________________________________________
> pygtk mailing list   [EMAIL PROTECTED]
> http://www.daa.com.au/mailman/listinfo/pygtk
> Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/
> 
> 

_______________________________________________
pygtk mailing list   [EMAIL PROTECTED]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

Reply via email to