[PyKDE] Some questions
Jim Bublitz
jbublitz at nwinternet.com
Thu Oct 26 05:47:36 BST 2006
On Wednesday 25 October 2006 20:46, Reza Salari wrote:
> 3- Another thing that I want to embed is a konsole. It seems that it sould
> be simple to embed konsole from KParts but there is not an example (I know
> there is a KHTM example). There are so many questions about implementing a
> konsole in PyKDE in the net but all with no success in getting a reply.
> Does any one decide to write a sample code? I really need a starting
> point... .I know also C++ but at beginner level and can understand not
> heavy C++ sources. So a useful simple C++ code will be useful too; I found
> some,but finally confused with their cross-references. (better to be in
> python).
Thanks for the nice comments (although all of the PyQt credit goes to Phil).
KDE does provide a konsolepart, however there are some problems with it. For
some distributions (and between different versions of the same distribution),
none of the konsolepart library symbols are exported, except the part itself.
It's supported in the current PyKDE release by default, which will prevent
some of PyKDE from loading on some systems, so it will be optional in the
next release.
No symbols exported means you can display and interact with a konsolepart in
your application, but you can't control it from the program except to the
extent that's possible from DCOP (which I think most people find isn't
sufficient for what they'd like to do).
I don't have a simple KParts example, but the fundamental code you need is
kparts.createReadOnlyPart or kparts.createReadWritePart (in the PyKDE docs in
the KParts-globals section).
from kparts import KParts, createReadOnlyPart
class MainWindow (KParts.MainWindow):
def __init__ (parent):
KParts.MainWindow.__init__ (parent)
self.part = createReadOnlyPart ("libsomepart", self)
self.widget = self.part.widget ()
You can then make self.widget the central widget or use it like any other
widget. If you want the part's menus, you need to build your application
using KXMLGUI (see the xml menu demo in PyKDE/examples), create a .rc file
for you portion of the menus and call setXMLfile, and call self.createGUI (in
you MainWindow class) to merge in the part's menus.
Note that to control most parts (except KHTMLPart) from within your program,
the only option is DCOP, because there is no Python interface to the API of
most parts. So it really isn't much different than using QXEmbed most of the
time. Also, some parts can be buggy - KWord context menus don't work
correctly, for example, and KSpread will crash on exit unless you set the
part to read-only before exiting.
I plan to do more work on this, including some examples, for PyKDE 4.
Jim
More information about the PyQt
mailing list