[PyQt] Catching key events

Frédéric frederic.mantegazza at gbiloba.org
Mon Jan 19 10:27:38 GMT 2009


Le 19/1/2009, "Mark Summerfield" <mark at qtrac.eu> a écrit:

>I suspect that using grabKeyboard()/releaseKeyboard() is not the right
>approach---for example, I've never seen them used in practice and have
>never used them myself.
>
>PyQt has an event handling hierarchy, and IMO it is best to start with
>the least powerful approach and work up 'til you get what you need.
>
>So if you want to catch particular keys you could create a QShortcut for
>each key sequence in the main window's __init__ and connect each
>shortcut to a method.
>
>If that isn't sufficient, then you could try reimplementing
>keyPressEvent()---and to propagate key event you don't want to handle
>yourself just call the base class version with the arguments you
>received. (And of course see David's reply.)
>
>If you want more control than that you could reimplement event(), or you
>could add one or more eventFilters() (but never use many of them since
>they can hurt performance). And that's not quite all. Keep in mind that
>PyQt is _different_ from Gtk so IMO it is best to find the PyQt-ish
>approach rather than to attempt a straight conversion from Gtk to PyQt
>code.

I totally agree that mimic PyGTK is not very efficient. In fact, I'm
porting my app to Qt this way to quickly have something running, and
test all other problems (packaging, and so). Then, I plan to redesign
it, and use all Qt great features.

Even if using grabKeyboard()/releaseKeyboard() in a few points works
really great, exactly how I want, I will try QShortcut...

About keyPressEvent, I'm using it, and it works (thanks to David),
except that the repeat sends press followed by release events, and I
really need to only get the press event when the key is pressed, and the
release one when it is released. I didn't find yet a way to do that. At
which level this feature is implemented, so I can try to change it?
Should I go down to the event() callback?

--
   Frédéric



More information about the PyQt mailing list