[PyQt] events / signals

fpp fpp.gsp at gmail.com
Thu Aug 26 18:38:32 BST 2010

On Wed, Aug 25, 2010 at 10:43 PM, Eric Frederich
<eric.frederich at gmail.com> wrote:
> If I find myself subclassing a widget just to get something to happen on an
> event am I doing something wrong?
> Is there another way to accomplish this?
> Is there a way to use an event like a signal in a self.connect?
> For example... If I want so do something when a label is clicked I have done
> the following and then just connect to the signal I emmit.
> class ClickableLabel(QLabel):
>     def __init__(self, *args, **kwargs):
>         super(ClickableLabel, self).__init__(*args, **kwargs)
>     def mousePressEvent(self, event):
>         self.emit(SIGNAL("clicked"))

I guess it depends... If you have only one such label in your app, you
don't need a subclass or even a signal.

You can just assign your own function to the method of a QLabel instance, as in:

self.myClickableQLabel.mousePressEvent = self.on_QLabel_clicked

then define what happens there:

def on_QLabel_clicked(self, event):
   print "Aha!"

Then again, if you need several such labels, creating a subclass
avoids code duplication.

More information about the PyQt mailing list