[PySide] inter-object communications

Henry Gomersall heng at cantab.net
Fri Nov 8 22:36:13 CET 2013


On 08/11/13 16:17, John Ehresman wrote:
> On 11/8/13 11:01 AM, Henry Gomersall wrote:
>> Ah, ok. So PySide creates a parallel class heirarchy, with methods that
>> can call back into Python. Out of interest, how is this check on being a
>> python implemented subclass performed? (a pointer to the relevant code
>> would be awesome!).
>
> At a high level, the code for a method named "foo" is (untested code
> that omits error handling and ref counting):
> C++WrapperClass::foo(args...)
> {
>    override = PyObject_GetAttrString(pySelf, "foo");
>    if (override != NULL) {
>      result = PyObject_Call(override, args...);
>      return result;
>    }
>    else {
>      return C++BaseClass::foo(args...);
>    }
> }
>
> Best way to get a more detailed look (for me, at least) is to look at
> the generated code.  In a built PySide tree, look at
> PySide/QtGui/PySide/QtGui/qwidget_wrapper.cpp in the build directory.
> The QWidgetWrapper::setVisible method is the override for the
> QWidget::setVisible method.

Ach, it's complicated!

So it seems the actual binding between objects is handled by Shiboken. 
Does the python object itself have a reference to the wrapper object, or 
is that only provided on demand through shiboken?

Is this detail documented anywhere?

Cheers,

Henry



More information about the PySide mailing list