[PyQt] properties and interfaces with dip 0.3

Phil Thompson phil at riverbankcomputing.com
Wed Jul 13 19:24:04 BST 2011


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