[PyQt] How can I capture some mouse events but ignore others?

Marc Nations mnations.lists at gmail.com
Fri Mar 6 15:47:01 GMT 2009


Thanks, wasn't aware of being able to accept events.
So I tried this, instead of waiting for release I moved it up to when a
button is pressed to get a better idea of what was happening. I tried this:

    def mousePressEvent(self, event):
        if event.button() == QtCore.Qt.RightButton:
            event.accept()
            self.rightClickMenu(event)
        else:
            event.ignore()

According to the docs for the mouse events it should do this: "You should
call ignore<http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qevent.html#ignore>()
if the mouse event is not handled by your widget. A mouse event is
propagated up the parent widget chain until a widget accepts it with
accept<http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qevent.html#accept>(),
or an event filter consumes it."

My understanding of that is once I ignore the event it should automatically
try the base class, which in this case is the base table widget. However
using that code the left-click is basically disabled and nothing happens. So
the event just seems to get dropped at that point. Is there something else I
need to do to make the event retreat in the right direction?




On Fri, Mar 6, 2009 at 9:19 AM, Brian Kelley <kelley at eyesopen.com> wrote:

>  It looks like you are not accepting the event, try:
>
> if event.button() == QtCore.Qt.RightButton:
>    self.rightClickMenu(event)
>    event.accept()
>
> From the docs:
>
> *void QEvent::accept ()
> *
> Sets the accept flag of the event object, the equivalent of calling
> setAccepted(true).
>
> Setting the accept parameter indicates that the event receiver wants the
> event. Unwanted events might be propagated to the parent widget.
>
> See also ignore().
>
> - Show quoted text -
>
> On 3/6/09 9:53 AM, "Marc Nations" <mnations.lists at gmail.com> wrote:
>
> Hi,
>
> I'm trying to create a custom table which pops up a menu when the user
> right clicks. This part works ok. It looks like this:
>
> class Table(QtGui.QTableWidget):
>     def __init__(self, parent,  gui):
>         QtGui.QTableWidget.__init__(self, parent)
>         self.gui = gui
>
>     def mouseReleaseEvent(self, event):
>         if event.button() == QtCore.Qt.RightButton:
>             self.rightClickMenu(event)
>
>
>     def rightClickMenu(self,  event):
>         pos = event.pos
>         self.gui.ui.menuEdit.popup(QtGui.QCursor.pos())
>
>
> The problem is that the default before of left click is changed, and I
> can't reset it. Without the mods the left clicks acts where if a multiple
> selection is made then clicking on another table cell de-selects all the
> previous items (unless a modifier key is used). With the above method, once
> multiple selections are made then it basically goes into <shift> mode and
> all previous selections are kept. I can't figure out a way to turn that off.
>
> Is there a way to cherry pick which mouse events you want and ignore the
> rest, basically letting them keep their default behavior? Because it looks
> like once the function is taken over then the default behaviors are lost.
>
> Thanks,
> Marc
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20090306/64a9b07e/attachment.html


More information about the PyQt mailing list