[PyKDE] Problem with PyQt3

Detlev Offenbach detlev at die-offenbachs.de
Thu Dec 28 11:14:43 GMT 2006


On Thursday 28 December 2006 11:41, Phil Thompson wrote:
> On Thursday 28 December 2006 9:14 am, Detlev Offenbach wrote:
> > On Wednesday 27 December 2006 23:37, Phil Thompson wrote:
> > > On Wednesday 27 December 2006 5:02 pm, Detlev Offenbach wrote:
> > > > On Wednesday 27 December 2006 17:58, Phil Thompson wrote:
> > > > > On Wednesday 27 December 2006 4:06 pm, Detlev Offenbach wrote:
> > > > > > Hi,
> > > > > >
> > > > > > I have an application with a dialog that was created with Qt
> > > > > > Designer and converted to Python with pyuic3. This dialog has an
> > > > > > ok and a cancel button. These buttons are connected to the
> > > > > > accept() and reject() slots. When I press one of the buttons, I
> > > > > > get the following error:
> > > > > >
> > > > > > RuntimeError: no access to protected functions or signals for
> > > > > > objects not created from Python
> > > > > >
> > > > > > What am I doing wrong?
> > > > > >
> > > > > > Versions:
> > > > > > Qt   3.3.7
> > > > > > PyQt 3.17
> > > > > > sip  snapshot-20061220
> > > > > >
> > > > > > all on a x86_64 machine with openSUSE 10.2. All PyQt related
> > > > > > stuff is self compiled.
> > > > >
> > > > > Have you got the .ui file? Is the problem reproducable with just
> > > > > the generated .py file and the -x flag?
> > > >
> > > > I have the .ui file available but unfortunately it is not
> > > > reproducable with just the generated .py file. The dialog itself is
> > > > generated from some Python code. It looks as if the dialog doesn't
> > > > really know it is a Python dialog.
> > >
> > > So how was the instance the exception was raised against created and
> > > what method were you calling?
> >
> > Problem found thanks to your questions. It was caused by a parent object
> > given to the dialog, which was not created from Python code. The
> > protected methods (slots) called by the dialog were accept() and
> > reject(). How a non Python created parent influences this is unclear to
> > me. Maybe this should be mentioned in the PyQt docs.
>
> A parent doesn't influence it - you just can't call protected methods of an
> object not created by Python (and Qt implements emit by calling a protected
> method).
>

And that is exactly the weird thing with this situation. The dialog was 
created by Python but the parent given to the dialog was not. After changing 
the code giving the constructor of the dialog a parent object created by 
Python (or None) made it work.

> When SIP (ie. Python) creates a new C++ object it creates a SIP generated
> sub-class of the required type. This sub-class includes public wrappers
> around the super-class's protected methods in order to expose them. If
> Python doesn't create the C++ object then the public wrappers aren't
> available.
>

Detlev
-- 
Detlev Offenbach
detlev at die-offenbachs.de




More information about the PyQt mailing list