[PyQt] How can I capture some mouse events but ignore others?
Jim Bublitz
jbublitz at nwinternet.com
Fri Mar 6 16:40:17 GMT 2009
On Friday 06 March 2009 06:53:01 am Marc Nations 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.
Look at QWidget.contextMenuEvent - it catches only right clicks.
Overload that.
If you want to grab those on the vertical or horizontal headers, I think
you'll have to install an event filter on the respective QHeaderViews
(QObject.installEventFilter) and grab only QContextMenuEvents for those
objects.
Jim
More information about the PyQt
mailing list