sigMouseClicked event and @pyqtSlot decorator

363 views
Skip to first unread message

James

unread,
Jul 13, 2021, 2:20:34 PM7/13/21
to pyqtgraph
Hi all,

The code below works as expected to get the position of a click in a GraphicsLayoutWidget. But if I uncomment the @pyqtSlot() line, then I get the following error when I click in the GLW:

    TypeError: onClick() missing 1 required positional argument: 'evt'

Should I not be using @pyqtSlot() decorator?

James

PS: I do not see an option to syntax-highlight code blocks in this group. Can that be enabled?

import sys
import pyqtgraph as pg
from PyQt5 import QtWidgets as qtw
from PyQt5.QtCore import pyqtSlot

class MainWindow(qtw.QMainWindow):
    def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs)

        self.glw = pg.GraphicsLayoutWidget()
        self.setCentralWidget(self.glw)
        self.glw.scene().sigMouseClicked.connect(self.onClick)
        self.show()

    #@pyqtSlot()                                                                                                                             
    def onClick(self, evt):
        print("glw clicked")
        print(evt.scenePos())

if __name__ == "__main__":
    app = qtw.QApplication(sys.argv)
    win = MainWindow()
    app.exec_()

Patrick

unread,
Jul 13, 2021, 10:20:25 PM7/13/21
to pyqtgraph
Hi,

I used to use the decorator which I believed was "correct" according to the PyQt documents. Then I realised there were many instances where I'd forgotten to use it, but everything still worked, so now I generally don't bother. It may still be good practice and necessary in some cases: https://stackoverflow.com/questions/14421897/is-the-pyside-slot-decorator-necessary/14431607#14431607

I think if you want to get it to work, you need to tell the decorator that the wrapped function accepts a parameter. In this case I believe the evt is an instance of QMouseEvent, so the decorator should be something like (import of QtGui needed of course):
@pyqtSlot(QtGui.QMouseEvent)

Also, as far as I can tell there aren't code blocks in the new Google Groups interface, which is a little backwards. Happy to be corrected on that!

Patrick

jim.v...@gmail.com

unread,
Jul 15, 2021, 9:52:11 AM7/15/21
to pyqtgraph
As to when or where the decorator is necessary at all, this link has a very short answer for PyQt4 that may also be relevant for PySide (and PyQt5). It's still slightly mysterious, though.

Ognyan Moore

unread,
Jul 21, 2021, 3:26:49 PM7/21/21
to pyqt...@googlegroups.com
Along this line, the pyqtgraph library doesn't use decorated slots anywhere in the library.  One of the issues on our backlog has been to try and evaluate if there is any benefit to doing so.  As far as I know, nobody has actually done this, if you're curious about it, and do some testing along this line, let us know here! https://github.com/pyqtgraph/pyqtgraph/issues/1607

--
You received this message because you are subscribed to the Google Groups "pyqtgraph" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pyqtgraph+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/pyqtgraph/6609b0e8-b5f8-4175-9f65-03f0dbbfb89cn%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages