python - 如何使用 QMainWindow 中的 GraphicsView 的 mouseDoubleClickEvent 调用和运行具有给定数量输入的函数?
问题描述
如何使用 QMainWindow 中的 GraphicsView 的 mouseDoubleClickEvent 调用和运行具有给定数量输入的函数?
我的原理图代码:
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):
...
我使用了这段代码,但它不起作用。请帮助我了解如何使用 MainWindow 中 graphicsView 的 mouseDoubleClickEvent 调用和运行 MyFunc。
非常感谢
解决方案
一种解决方案是传递一个 lambda,例如:
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_())
推荐阅读
- magento - 如何根据名称更改magento 1.9中的索引
- ceph - Ceph Nautilus : 如何启用 Ceph MGR 仪表板
- javascript - 我正在尝试找到一种在我的 NativeScript 应用程序中嵌入 twitter 时间线的方法。Web 视图/HTML 视图?
- iphone - Xamarin Forms:无法在设备上启动 ios 应用程序
- php - 正则表达式/ PHP - 在包含两个变量的文本中查找字符串
- flutter - 如何确定小数点的当前语言环境符号
- python - 如何在 Tensorflow 张量的每一行和每一列中选择前 q 个元素?
- wordpress - wp_add_inline_style 不添加到队列中
- haskell - 从自定义类型列表中过滤和提取的最佳方法?
- javascript - 如何在 crud 上创建一个简单的编辑按钮?