[PyKDE] KDE app template: Qt signal problem...

Jim Bublitz jbublitz at nwinternet.com
Tue Apr 26 22:15:11 BST 2005


On Tuesday 26 April 2005 11:25, Simon Edwards wrote:
> On Tuesday 26 April 2005 19:48, Jim Bublitz wrote:
> > On Tuesday 26 April 2005 06:00, Simon Edwards wrote:
> > > Hello,
> > >
> > > I'm having some trouble translating one of the kdevelop C++ application
> > > templates to Python. Setting up some signals from the HTML KPart to the
> > > application isn't working. Qt gives:
> > >
> > > QObject::connect: No such signal QWidget::signalChangeStatusbar(const
> > > QString&)
> > > QObject::connect:  (sender name:   'unnamed')
> > > QObject::connect:  (receiver name: 'unnamed')
> > > QObject::connect: No such signal QWidget::signalChangeCaption(const
> > > QString&) QObject::connect:  (sender name:   'unnamed')
> > > QObject::connect:  (receiver name: 'unnamed')
> > >
> > > The code is:
> > >
> > > QObject.connect(self._html, SIGNAL("setWindowCaption(const QString&)"),
> > > self.slotSetTitle)
> > > QObject.connect(self._html, SIGNAL("setStatusBarText(const QString&)"),
> > > self.slotOnURL)
> > >
> > > (self._html is a KParts::ReadOnlyPart object) All of the code is here:
> > >
> > > http://www.simonzone.com/software/python/kdeapp.tar.bz2
> > >
> > > ideas?
> >
> > I get a 404 error for the url ?? Can you just email the code?
>
> my bad, try again,
>
> BTW, I'm using:
> * SIP 4.0.1
> * PyQt (PyQt-x11-gpl-3.12)
> * PyKDE 3.11.1

In testapp.py, KParts want to reside in a KParts.MainWindow, not a 
KMainWindow.  That means you'd need to provide an argument to createGUI as 
well, which would be the part being displayed in the main window.

Also, self._html is a KParts.ReadOnlyPart, which doesn't offer the signals 
you're trying to connect to. You should be able specify the class type in the 
createReadOnlyPart call (rather than using the default), or else try sip.cast 
to cast it to the type that offers the signals you want (not sure what you're 
going for here).

You can also look at examples/pyKHTMLPart.py - it's just hardcoded to use a 
KHTMLPart and bypasses a lot of the KParts machinery.

The problem I've had with using KTrader is that it doesn't always return the 
particular part(s) you want to embed - I'm not that familiar with all of the 
details of using KTrader (obviously). I'd consider whether you want to embed 
an arbitrary part based on what's available or you really want just a 
KHTMLPart or KHTMLView every time - the latter being a lot simpler and more 
predictable. I'd start by a) looking at what KTrader is offering you; b) 
hardcoding one choice offered and getting that to work; c) work on the 
KTrader stuff til that works.

There was an earlier KParts example but it broke with some of the KDE version 
changes quite a while ago, and I haven't worked up a new example. To get it 
to work with the approach you're using, you need to pay attention to what 
type self._html is, as returned from createReadOnlyPart - I believe all of 
the "typecasting" machinery is in place in sip and PyKDE, but haven't tried 
it out in a while.

I'm a little fuzzy on the details at the moment (and my head is pretty stuffed 
up too, so thinking about this hurts more than usual),   but those are the 
major features I recall about getting something like this to work.

Jim




More information about the PyQt mailing list