2

I am overriding the QWidget.mousePressEvent like this:

widget = QtWidgets.QWidget()
widget.mousePressEvent = my_function

def my_function(QMouseEvent):
    print('Mouse Pressed')

But my question is, how do I now pass it a variable? I need something like this:

for index in range(10):
    widget = QtWidgets.QWidget()
    widget.mousePressEvent = my_function(index)

def my_function(QMouseEvent, index):
    print(index)
Frank
  • 2,109
  • 7
  • 25
  • 48

1 Answers1

4

Use functools.partial

from functools import partial

def my_function(index, QMouseEvent):
    print(index)

for index in range(10):
    widget = QtWidgets.QWidget()
    widget.mousePressEvent = partial(my_function, index)

Or use lambda

    widget.mousePressEvent = lambda: event, index=index: my_function(index, event)

Notice that optional lambda argument used for capturing index by value.

mugiseyebrows
  • 4,138
  • 1
  • 14
  • 15