Как я могу вызвать и запустить функцию с заданным количеством входов, используя mouseDoubleClickEvent объекта GraphicsView, который находится в QMainWindow? - PullRequest
0 голосов
/ 15 февраля 2019

Как я могу вызвать и запустить функцию с заданным количеством входов, используя mouseDoubleClickEvent объекта GraphicsView, который находится в QMainWindow?

Мой код схемы:

class MainWindow(QMainWindow):
    ...

    def __setUI(self, appTitle="[default title]"):
        ...

        self.graphicsView = GraphicsView(self)

        self.graphicsView.mouseDoubleClickEvent = self.MyFunc(self.in_1, self.in_2)

     def MyFunc(self, event, input_1, input_2):
        ...

Я использовал этот код, но это не работает.Пожалуйста, помогите мне узнать, как я могу вызвать и запустить MyFunc с помощью mouseDoubleClickEvent of graphicsView, который находится в MainWindow.

Большое спасибо

1 Ответ

0 голосов
/ 15 февраля 2019

Одним из решений является передача лямбды, что-то вроде:

self.graphicsView.mouseDoubleClickEvent = lambda event : self.MyFunc(self.in_1, self.in_2)

Это работает, но создает проблемы, так как mouseDoubleClickEvent имеет реализацию, которая с предыдущим кодом удаляется.В этом случае лучшее решение - использовать eventFilter, но для просмотра, так как он получает событие мыши.

from PyQt5 import QtCore, QtWidgets

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.graphicsView = QtWidgets.QGraphicsView()
        self.setCentralWidget(self.graphicsView)
        self.graphicsView.viewport().installEventFilter(self)

        self.in_1 = 10
        self.in_2 = 20

    def eventFilter(self, obj, event):
        if obj is self.graphicsView.viewport():
            if event.type() == QtCore.QEvent.MouseButtonDblClick:
                self.func(event)
        return super(MainWindow, self).eventFilter(obj, event)

    def func(self, event):
        print(event.pos(), self.in_1, self.in_2)


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...