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). 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. Phil _______________________________________________ PyKDE mailing list [email protected] http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
