[PyQt] Protected methods in unwraped instances
Phil Thompson
phil at riverbankcomputing.com
Thu Dec 30 14:51:56 GMT 2010
On Thu, 30 Dec 2010 11:38:22 -0300, Nahuel Defossé
<nahuel.defosse at gmail.com> wrote:
> Hi,
>
> is there some way to detect weather a widget has been created from
> Python (I belive through sip in the internals) and when it's been
> created in C++.
> I've come up with a very nasty solution that consists in checking for
> a protected method and catching the RuntimeError. But I belive there
> must
> be something more clever.
>
> For example:
> tw = QTabWidget() # Is a PyQt object
> te = QTextEdit()
> tw.addWidget(te)
> sw = tw.parent() # -> <PyQt4.QtGui.QStackedWidget object at 0x93546ec>
> sw.receivers(SIGNAL('x()'))
>
> RuntimeError: no access to protected functions or signals for objects
> not created from Python
>
> So, we came up with this code:
> def is_sip_wrapped( foo ):
> try:
> foo.sender()
> except RunitmeError:
> return False
> return True
>
> And do not feel comfortable with it at all, but it works. I guess
> someone there could add some extra information about this detection.
>
> Though I can perfectly call receivers for any other widget created in
> Python.
That's probably the only way to do it at the moment. I could implement
sip.isderived() easily enough.
Phil
More information about the PyQt
mailing list