[PyKDE] Is PyKDE good for my project?
Jim Bublitz
jbublitz at nwinternet.com
Mon Jun 21 23:16:00 BST 2004
On Monday 21 June 2004 22:07, Maurizio Colucci wrote:
> I am evaluating PyKDE for my project.
> 1)
> Can I write a kicker applet completely in PyKDE? If so, could you please
> give me some hint how to do it? (e.g., where do I put the init() function,
> where do I copy the .py file, how do I cope with the requirement of having
> a .la file...).
> If I can't, what is the least amount of C++ code I have to write?
The status of panel applet support is a little murky at the moment. It was
included in PyKDE-3.8, but removed from PyKDE-3.11 (and you don't want to go
back to 3.8). It will eventually be part of an addon package separate from
PyKDE (but requiring PyKDE), but the people (including me) doing the
development haven't worked out the details yet.
I have working code (including installation) and could probably send you
something if you're in a real hurry (let me know). Otherwise, a general
release is probably a month or more away (probably "more"). It requires sip
4.0, which is available in rc form now and final release soon.
Basically, the panel applet/extension (about the same for both) interface uses
a single C++ lib to handle all instances of Python-based applets or
extensions - you just need to install this, along with libpythonize.so, which
is a very simple wrapper for the Python interpreter. You don't need to write
any C++.
There is an appletInstall.py application (needs some cleanup, but working)
which will simplify installing Python-based panel applets. Assume you write
someApplet.py: In someApplet.py, you need a factory function ("createApplet"
- the code is pretty much the same for all cases) and a class sub-classed
from KPanelApplet that actually implements your applet. What the installer
does is:
1. Creates a .desktop file that references "libsomeApplet.so" and places it
in the share/apps/kicker/applets directory along with your Python file.
2. Creates a symlink in the appropriate directory from libsomeApplet.so to
libpykpanelapplet.so (the single applet interface lib)
3. Creates a fake libsomeApplet.la file in the approprieate directory
(The installer does some file renaming too - your file will be installed as
someApplet_py_applet.py - not usually a big deal).
When kicker reads the .desktop file, it loads libpykpanelapplet (via the
symlinked name and fake .la file). libpykpanelapplet has the required 'init'
function which loads the Python interpreter supplied in the libpythonize.so
lib (if not already loaded), loads the requested Python applet script into
the interpreter, runs the factory function and returns a KPanelApplet * for
your applet back to kicker. sip handles all of the Python<=>C++ conversions
(in the createApplet function, which you can mostly just cut and paste).
Because of the way Python<=>C++ conversions are now handled, applets may be a
little more difficult to debug - I still have to look into that.
> 2)
>
> Can I use KHTML with pyKDE? My app needs integrated web browsing.
There is a KHTML part example (pyKHTMLPart.py) in the examples/ directory of
PyKDE. All it does is load and display www.kde.org (it needs an active 'net
connection running of course). From there you can use the appropriate signals
and slots and additional KDE classes in PyKDE to create as much of a web
browser as you need.
I haven't looked at using KHTML as a plain widget lately, but the KParts
interface is probably a better way to go and you end up with a widget anyway.
Jim
More information about the PyQt
mailing list