[PyQt] properties and interfaces with dip 0.3
Phil Thompson
phil at riverbankcomputing.com
Wed Jul 13 20:08:49 BST 2011
On Wed, 13 Jul 2011 14:56:52 -0400, Lic. José M. Rodriguez Bacallao
<jmrbcu at gmail.com> wrote:
> ok, I see now, a couple of questions:
> 1- and how to use observe function as a decorator
@observe('id')
def on_change(self, change):
Note that you don't have to use 'ITest.id'. This is because the string is
parsed later on than when @ITest.id is.
> 2- there is any way that the observer/setter method of a property be
> called when setting the initial value
No.
Phil
> On Wed, Jul 13, 2011 at 2:24 PM, Phil Thompson
> <phil at riverbankcomputing.com> wrote:
>> On Wed, 13 Jul 2011 13:53:57 -0400, Lic. José M. Rodriguez Bacallao
>> <jmrbcu at gmail.com> wrote:
>>> yes, I know I can't think in interfaces like base classes but, as I
>>> read in documentation that attributes are automatically added to te
>>> concrete implementation of the interface, well, look at this sample:
>>>
>>> class ITest(Interface):
>>>
>>> id = Str()
>>>
>>>
>>> @implements(ITest)
>>> class Test(Model):
>>>
>>> @id.observer
>>> def on_change(self, change):
>>> print 'changing...'
>>>
>>>
>>> if __name__ == '__main__':
>>> test = Test()
>>> test.id = 'xxx'
>>> print test.id
>>>
>>> it give me this error:
>>>
>>> Traceback (most recent call last):
>>> File
"/home/jmrbcu/work/dev-projects/imagis/src/imagis/ui/widget.py",
>>> line 49, in <module>
>>> class Test(Model):
>>> File
"/home/jmrbcu/work/dev-projects/imagis/src/imagis/ui/widget.py",
>>> line 51, in Test
>>> @id.observer
>>> AttributeError: 'builtin_function_or_method' object has no attribute
>>> 'observer'
>>>
>>> and if I change @id.observer to @ITest.id.observer ten the observer is
>>> never called.
>>
>> ...because if you are using that pattern then the name of the method
must
>> be the same as the name of the attribute, ie. 'id' instead of
>> 'on_change'.
>>
>> Phil
>>
More information about the PyQt
mailing list