[PyKDE] Re: newest Version

Phil Thompson phil at riverbankcomputing.co.uk
Thu Oct 30 01:56:01 GMT 2003


On Wednesday 29 October 2003 8:38 pm, David Boddie wrote:
> Apologies to confused readers: this discussion started off-list but now
> seems an appropriate point to bring it on-list. I hope Roland doesn't mind
> me using one of his messages as a device to do this.
>
> On Wednesday 29 October 2003 07:42, Roland Schulz wrote:
>
> Background for new readers: Roland has written a library which allows
> Python QObject-derived widgets to be used in Qt Designer. We were
> discussing how the meta objects for widgets are used to help integrate
> them into the Designer framework, why the lack of a QMetaObject class
> for PyQt means that Designer can't preview them with other widgets and,
> finally, what methods are available to us to work around this problem.
>
> We could try these methods:
>
>  1. Wrap QMetaObject using sip and enable the QObject.metaObject method.
>
>  2. Do nasty hacking of pointers to modify the QMetaObject generated for
>     the class at the C++ level.
>
>  3. Intercept the QMetaObject generation by customising the generation
>     of the meta object when a class is instantiated.
>
> You join us at the point where we were talking about option 3. I shall now
> leave the narrator's chair and get back into character.
>
> > I don't see how moc should help here. I don't think it should be put in
> > moc_pyqwidgetplugin.cpp because it is automatically generated from
> > pyqwidgetplugin.h and is for class PyQWidgetPlugin. Others moc_* file
> > don't exist and you can't create other moc files from *.py files. Or are
> > you thinking about creating a pymoc command?
>
> I've thought some more about this and I'm coming round to the idea that we
> could derive a class from QWidget, in much the same way that Jim derived
> PyKPanelApplet from KPanelApplet, and get it to set up a customised meta
> object for each Python class by examining the relevant class definitions in
> Python scripts. In fact, looking at moc_pykpanelapplet.cpp in the
> PyKDE-3.8rc2 sources, it seems that we have a good template to start from.

This is the proxy I was suggesting - synthesise C++ metadata from 
introspecting the Python objects.

> The disadvantages of this approach are:
>
>  1. Lack of a general method for defining signals and slots.
>
>  2. The introduction of a purpose-specific class which isn't required, or
>     possibly even wanted, when an application is deployed. This might make
>     it necessary for subtly different code to be used inside and outside
>     Designer.

I see 2) as an advantage. I'm happy to put things in SIP and/or PyQt if they 
are generally useful, but not if they are specific to a particular purpose. 
But I'm happy to include in PyQt a separate library containing some sort of 
proxy that manages the interface with Designer.

Phil




More information about the PyQt mailing list