[PySide] Questions about QProperties
Christian Gagneraud
chris at techworks.ie
Wed Jul 25 18:52:43 CEST 2012
Hi list,
[I'm using PySide-1.1.0 and Qt-4.7.4 on an OpenSuse-12.1]
I don't if it's me doing something wrong, but I'm having trouble getting
basic things working with QProperties and inheritance.
First I tried to define properties using the decorator syntax like this:
@QtCore.Property(float)
def toto(self)
return self._toto
@toto.setter(self, value)
self._toto = value
And it simply doesn't work, the setter is never called.
Then i decided to go with:
toto = QtCore.Property(float, get_toto, set_toto)
And it worked as expected, until I start using class derivation. Here is
a basic use case:
from PySide import QtCore
class Obj1(QtCore.QObject):
def __init__(self):
super(Obj1, self).__init__()
self._toto = 0.0
def get_toto(self):
print "get toto"
return self._toto
def set_toto(self, value):
print "set toto"
self._toto = value
toto = QtCore.Property(float, get_toto, set_toto)
class Obj2(QtCore.QObject):
def __init__(self):
super(Obj2, self).__init__()
o1 = Obj1()
print o1.property("toto")
o1.setProperty("toto", 1.23)
print o1.property("toto")
print ""
o2 = Obj2()
print o2.property("toto")
o2.setProperty("toto", 1.23)
print o2.property("toto")
And here is the output:
get toto
0.0
set toto
get toto
1.23
None
1.23
So what happens here is obj1.toto works as expected, but obj2.toto
doesn't, a new property "toto" is being created on obj2 and
Obj1::get_toto is never called.
I would expect to be able to set an Obj1 property on an Obj2 instance
when I call obj2.setProperty(...)
At least, this work in C++, but it doesn't work in my case.
This sounds so basic, that I couldn't believe it! So either i'm doing
something wrong, or the python behaviour of a QObject is different from
the C++ version, which sounds really odd to me....
Chris
--
Christian Gagneraud,
Embedded systems engineer.
Techworks Marine
1 Harbour road
Dun Laoghaire
Co. Dublin
Ireland
Tel: + 353 (0) 1 236 5990
Web: http://www.techworks.ie/
More information about the PySide
mailing list