[PyKDE] PyKDE update

Jim Bublitz jbublitz at nwinternet.com
Mon Sep 29 20:02:00 BST 2003


On Monday September 29 2003 02:52, Roland Schulz wrote:

> I had to many tests at university to look at getting
> QtDesigner Plugins to work. Has someone taken a look at it in
> the meantime? Any advices how I should starting this now that
> I have a little bit of time?

I believe someone else on the list has been looking into this - 
hopefully they can give you an update. I'd recommend an approach 
similar to PyKPanelApplet/libpykpanelapplet in PyKDE3.8rc2 
(available at http://www.sourceforge.net/projects/pykde). That 
includes doing two things:

1. Embedding Python - libpythonize already takes care of this, 
although I suspect for QtDesigner you'll run into the same 
problem panel applets had, which is problems in loading multiple 
plugins with a single instance (single pid) owning libpythonize. 
There is a fix for this (for panel applets anyway - works for 
KControl also I believe), but it needs some more work and 
testing.

2. Creating a .so lib - libpykpanelapplet is a single .so lib 
that loads any (well-behaved) Python-based panel applet, so 
Python users don't need to create the .so lib. The same should 
be possible for QtDesigner. For panel applets, kicker calls a 
factory function ('init' in this case). From the info kicker 
passes to the factory function (basically the config file name), 
it's possible to locate and load a properly named/located panel 
applet.

libpythonize is not dependent on PyKDE - it just isn't available 
any place else at the moment. I'm hoping the same approach will 
work for all the plugin environments in both KDE and Qt (panel 
applet, panel extension, KControl modules, KParts, QtDesigner, 
style plugins, etc., and even plugins for Kontact and KOffice 
eventually).

I'd be happy to provide whatever assistance I can on this, and 
would appreciate any input on libpythonize if you use that and 
find you need changes/extensions. I'll be working on related 
stuff for PyKDE over the next several weeks.

> > I also have completely new documentation generation working
> > - you'll end up with two choices: you can use a provided
> > documentation reader. or you can generate a complete HTML
> > class reference. The HTML runs about 3MB. The reader
> > generates HTML on the fly and the data file is only about
> > 600KB.  The new docs provide a Python formatted description
> > for every method and also provide links to the KDE classref
> > docs. The reader has two panes - one for the PyKDE docs and
> > one for the linked KDE docs. The generator for the full HTML
> > docs will set the same links if provided with the path to
> > the KDE classref docs. The reader also allows you to add
> > your own annotation to the docs, and the annotations are
> > kept in a separate file and should survive version changes.
> > I have some work to do to make this installable and usable,
> > but it seems to work pretty well.

> Is this also possible for the QT Documentation?

It'd be a lot of work. There are a couple of problems - here's 
the long explanation:  This works by starting from both the h 
files and sip files for a given PyKDE version. I use presip 
(code generator - generates sip files from h files normally) 
with a switch to generate a documentation text file instead of 
sip files. Each major element (namespace, class, method, enum, 
typedef, variable) has an encoding that the viewer/html 
convertor can use to generate HTML (either on demand in the 
viewer, or to a file using the convertor - same input format and 
HTML format either way).

The problems with PyQt are that Phil organizes the project 
differently than PyKDE. That isn't a major problem, but it means 
creating PyQt project files for presip (not too hard) and 
running a parallel project, which is always a pain to keep in 
sync and updated. The more serious problem is that a) PyQt 
supports a lot of older Qt versions (I think this is a Good 
Thing, but it's a problem in this specific case) and b) in PyKDE 
most h files have variable names for method args, while in Qt 
more methods don't.  The end result of both of those is the docs 
aren't as useful as in the PyKDE case. presip gets the variable 
names from the h files (if they exist) and with the older Qt 
versions, many of the methods have disappeared or changed 
significantly. The method declaration in the docs ends up with 
all of the correct types, but variable names like "a0", "a1" 
etc., which makes it harder to reconcile with the Qt C++ docs 
and less useful on its own.

I did try this a few weeks ago and it "works", but PyQt would 
also need a different HTML format than PyKDE - don't recall why 
I thought that exactly, but what made sense for PyKDE wasn't as 
good for PyQt.  Certainly the variable name problem was a big 
part of it. There are some other issues with marking up 
handwritten code - I didn't go far enough to see if I could 
bootstrap that from the current PyQt doc format or not. PyKDE 
uses it's own embedded markup method for handling that (also 
generated mostly automatically)

I also don't want to oversell this - pretty much all it does is 
give you a Python formatted method declaration like:

	KEdit (parent= None, name = "")
        returns a KEdit instance

	argument   type        default
       -----------------------------------
        parent       QWidget    None
        name        char *         ""

for each method, tells you if it's limited to specific versions 
(or not implemented at all),  provides a few other details 
(static, virtual, pure virtual, etc), and links to the KDE C++ 
docs for more explanation. I can add text to each method, but 
have in only 2 or 3 cases. It's unlikely I'll spend much time 
writing docs, but probably will add text for special cases. This 
probably isn't nearly as good as what theKompany is currently 
offering.

What I'd want (and I believe Phil agrees - we've discussed it a 
little) is a solution that's transparent and automatic - for 
various reasons, it's not desireable or even a good idea to 
expect PyQt to conform to what presip expects for project 
organization/markup, while at the same time  I don't want to be 
doing Qt docs on a regular basis. This might work out some time 
in the future, but it isn't going to get a high priority right 
now.
        
> > I've also test-generated PyKDE3.2alpha1 and fixed a few
> > problems with my sip file generator. I won't be releasing a
> > PyKDE version for PyKDE3.2 until I can get KDE3.2 binaries
> > to install and test against - compiling KDE from source just
> > looks too
> > time-consuming at the moment.

> Do you know of Konstruct
> (http://developer.kde.org/build/konstruct/)? I works very
> good. This way it only takes long for the computer ;-). In
> case you have SuSE I could also send you the compiled bineries
> as tgz. Creating rpm would take too much time I guess. All
> just in case you're intrested. I don't need PyKDE3.2 at the
> moment.

Thanks for the offer - I'll probably look at it in the future. 
I'd need to set up a specific partition for this plus do the 
compile. As you point out, most of that is machine time but 
depending on circumstances, it still involves a few days of 
elapsed time, and I have a lot of other stuff I want to get to 
first with the time I have available. I would like to get to it 
ahead of the 3.2 final release though.

Jim




More information about the PyQt mailing list