[PyKDE] dir(QtObjectThing) -> give_me_all_attrs(QtObjectThing)?
Gerard Vermeulen
gvermeul at grenoble.cnrs.fr
Fri May 30 19:16:01 BST 2003
On Fri, 30 May 2003 17:56:20 +0100
Phil Thompson <phil at riverbankcomputing.co.uk> wrote:
> On Friday 30 May 2003 5:36 pm, Gerard Vermeulen wrote:
> > On Thu, 29 May 2003 18:47:46 +0100
> >
> > Phil Thompson <phil at riverbankcomputing.co.uk> wrote:
> > > On Wednesday 28 May 2003 6:37 pm, Kasper Souren wrote:
> > > > Hi,
> > > >
> > > > I wonder whether there is a simple trick to get all the existing
> > > > attributes? Now a dir(QtObjectThing) just gives a very limited number
> > > > of attributes. When exploring PyQy (and PyQwt) it would be a great help
> > > > when there was a simple way to just see the possible methods. Without
> > > > resorting to the manual, that is ;) When working in Python I usually
> > > > just hack around and use my TAB key a lot (in order to get possible
> > > > completions).
> > > >
> > > > Once an object's method is used it does appear in dir(the_object). So I
> > > > hope there is a possibility to have a little function that could
> > > > 'trigger' the possible attributes...
> > > >
> > > > Having this automatically would be even cooler, but I guess that that
> > > > would already have been done if it were easy... And, I hope not but,
> > > > maybe the same counts for the little hackish function I have in mind.
> > >
> > > I'm afraid it's a feature. Without this feature PyQt would take too long
> > > to load and take up too much memory.
> >
> > Adding the following function to each class is sufficient, I think:
> > class QwtWheel: QwtSliderBase
> > {
> > %HeaderCode
> > #include <qwt_wheel.h>
> > %End
> >
> > public:
> > void getLazyMethodNames();
> > %MemberCode
> > if (sipParseArgs(&sipArgsParsed, sipArgs, "")) {
> > int i, n;
> >
> > Py_BEGIN_ALLOW_THREADS
> > n = sipClassAttrTab_$C.la_nrmethods;
> > Py_END_ALLOW_THREADS
> >
> > PyObject *result = PyList_New(n);
> > if (!(result))
> > return 0;
> >
> > for (i=0; i<n; i++)
> > PyList_SetItem(
> > result,
> > i,
> >
> > PyString_FromString(sipClassAttrTab_$C.la_methods[i].ml_name) );
> >
> > return result;
> > }
> > %End
> >
> > QwtWheel(QWidget * /TransferThis/ = 0, const char * = 0);
> > ...
> > ...
> > };
> >
> > With such a function in each class, it will take a few lines of Python code
> > to adapt the rlcompleter module so that it sees the lazy method names while
> > they are not yet activated.
> >
> > Phil, are you willing to adapt sip so that it will generate a function like
> > this for each class? That will save me some cut&paste work :-)
>
> Interesting. You can avoid the cut&paste by using /AutoGen/, but I think a
> better solution is to implement a function in the sip module...
>
> import sip
>
> names = sip.getLazyMethodNames(QwtWheel)
>
> At the moment the sip module doesn't contain any functions, but the reason it
> was changed from a library to a module was to allow these sorts of dirty
> hacks to be added without polluting PyQt etc.
>
> So, tell me exactly what you want - or is the above all that's needed?
>
Yes, having this in sip is much better (I started to look there, but saw no
way to break in).
I think the above is all, but let me change the rlcompleter first, to be sure.
It would be nice to include such a modified rlcompleter with PyQt.
Warning: you opened Pandora's box, because the next question is ...
and doc-strings?
Gerard
More information about the PyQt
mailing list