[pygtk] Overriding interface properties
Just Fill Bugs
mozbugbox at yahoo.com.au
Fri Jun 17 22:46:54 WST 2011
On 06/17/2011 05:05 PM, Arjan Molenaar wrote:
>
> On 17 Jun 2011, at 05:25, Just Fill Bugs wrote:
>
>> On 06/17/2011 12:44 AM, Arjan Molenaar wrote:
>>> Hi,
>>>
>>> I've started porting Gaphas to GTK+ 3 now, using PyGI on Linux. It all goes quite smoothly. Only now I'm running
>>> into the problem that my widget should implement the Gtk.Scrollable interface. For that it should define
>>> a few properties.
>>>
>>> In C those need to be declared using g_object_class_override_property(). What's the Python counterpart for this?
>>>
>>
>> It seems the PyGobject examples/properties.py works okey once you replaced gobject with GObject to make it gi compatible. So take a look at the PyGobject's examples directory.
>
> Did that. Only there the creation of new properties is demoed. I need to implement properties defined in an interface. For that the protocol is slightly different. I can't find how that is covered.
>
Aha, looking into pygobject source tree under the
tests/test_properties.py, it shows how to do the getter/setter in the
class TestProperty(unittest.TestCase):
def testCustomGetter(self):
class C(gobject.GObject):
def get_prop(self):
return 'value'
prop = gobject.property(getter=get_prop)
o = C()
self.assertEqual(o.prop, 'value')
self.assertRaises(TypeError, setattr, o, 'prop', 'xxx')
def testCustomSetter(self):
class C(gobject.GObject):
def set_prop(self, value):
self._value = value
prop = gobject.property(setter=set_prop)
def __init__(self):
self._value = None
gobject.GObject.__init__(self)
o = C()
self.assertEquals(o._value, None)
o.prop = 'bar'
self.assertEquals(o._value, 'bar')
self.assertRaises(TypeError, getattr, o, 'prop')
So you have to specify getter/setter when declare properties at
gobject.property().
Someone should make a better example for the new style property
specification in the doc.
More information about the pygtk
mailing list