[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    Re: [PyKDE] callback not being called
From:       David Boddie <david () boddie ! org ! uk>
Date:       2007-01-22 22:27:24
Message-ID: 200701222327.24466.david () boddie ! org ! uk
[Download RAW message or body]

On Monday 22 January 2007 03:43, Tony Cappellini wrote:

> Well, the QT docs are all in C++, and often there are some differences for
> python.
> I've spent a lot of time reading the pyQT docs here, but it's very terse,
> and don't show any examples.

Yes, they could do to be improved. The examples in the PyQt source
distribution are ported from the C++ ones, so the documentation can be
read alongside their source code, but I'll admit that it's not ideal.

> http://www.riverbankcomputing.com/Docs/PyQt4/pyqt4ref.html#pyqt-slots-and-q
>t-slots (this is the only python-specific help I can find. It's only one
> page!)
>
> 3.5   Connecting Signals and
> Slots<http://www.riverbankcomputing.com/Docs/PyQt4/pyqt4ref.html#id14>
>
> Connections between signals and slots (and other signals) are made using
> the QtCore.QObject.connect() method. For example:
>
> QtCore.QObject.connect(a, QtCore.SIGNAL("QtSig()"), pyFunction)
> QtCore.QObject.connect(a, QtCore.SIGNAL("QtSig()"), pyClass.pyMethod)
> QtCore.QObject.connect(a, QtCore.SIGNAL("QtSig()"), b,
> QtCore.SLOT("QtSlot()")) QtCore.QObject.connect(a,
> QtCore.SIGNAL("PySig()"), b, QtCore.SLOT("QtSlot()"))
> QtCore.QObject.connect(a, QtCore.SIGNAL("PySig"), pyFunction)

I think this page has been around for so long, in many different versions of
PyQt, that many long-time users have just memorized it. :-/

>   def updateTextBox(self):
>        # this function should be called, when the button is pressed
>   self.patchBrowser.setPlainText(self.tr("Callback was called"))
>
> > However, your updateTextBox() slot is just a normal Python method, so you
> > can just pass a reference to it:
> >
> > self.connect(self.patchNames, QtCore.SIGNAL("activated()"),
> >              self.updateTextBox)
>
> tried this, it still doesn't call my function

My mistake, sorry! You need the following:

self.connect(self.patchNames, QtCore.SIGNAL("activated(const QString &)"),
             self.updateTextBox)

The signal is the one shown here:

http://www.riverbankcomputing.com/Docs/PyQt4/html/qcombobox.html#activated-2

Does this help at all?

> > For slots defined by the C++ base class, you can use SLOT() to specify
> > them in the connect() call; for example, the following connection would
> > cause the dialog to be hidden when a patchNames combobox entry is
> > activated:
> >
> > self.connect(self.patchNames, QtCore.SIGNAL("activated()"), self,
> >              QtCore.SLOT("hide()"))
>
> tried this to, it doens't call my function either

I made the same mistake twice, thanks to cut-and-paste. :-(

> > It's quite common that people forget to provide the full signature (with
> > C++ types, but without argument names) to the SIGNAL() and SLOT()
> > functions. It would be interesting to know whether it seems like a
> > strange convention to people who have never used Qt with C++, or whether
> > it catches everyone out at some point.

I think I proved my own point. :-)

> I haven't had enough time with pyqt4 to forget anything.:-)
>
>  I'm just trying out pyQT4, but dabbled with version 3 a few years ago.
> A lot has changed, but the signals and slots have basically stayed the
> same, from what I can see.
>
> The problem is trying to find python examples instead of C++ is the
> shortcoming. The python tutorial examples of the shooter game do a lot of
> the same thing, and dont use many widgets.

Do you miss Python-specific documentation or just example code to look at?

There's not a great deal that can be done right now when it comes to the
code shown in the API and example documentation, but the C++ examples
themselves can be ported to Python, and maybe they could be documented on
the PyQt Wiki. See this page for a list of those we ported for Qt 4.0 and
Qt 4.2:

  http://www.diotavelli.net/PyQtWiki/PyQt4Examples

In the future, it would be good to actually document them on the Wiki as
well as just list the ones we manage to port.

David

_______________________________________________
PyKDE mailing list    PyKDE@mats.imk.fraunhofer.de
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic