PyQt mousePressEvent - 获取被点击的对象?

时间:2014-12-01 05:06:46

标签: python pyqt pyqtgraph qmouseevent

我正在使用PyQt和PyQtGraph来构建一个相对简单的绘图UI。作为其中的一部分,我有一个graphicsview(pyqtgraph的graphicslayoutwidget),其中PlotItems由用户动态添加到它。

我想要实现的是允许用户通过双击选择PlotItem。

如果用户在窗口小部件窗口中的某个位置双击,这很简单,但我似乎无法弄清楚如何返回点击的内容。

我的大多数搜索结果都试图为某些按钮重新实现mousePressEvent。我已经阅读了一些关于事件过滤器的内容,但我不确定这是否是必要的解决方案。

我不确定其他哪些信息对于帮助回答这个问题可能有用,所以如果不清楚我要问的是什么让我知道,我可以澄清一下。

编辑:

重复:

pyqtgraph: When I click on a PlotItem how do I know which item has been clicked

2 个答案:

答案 0 :(得分:4)

一种策略是连接到GraphicsScene.sigMouseClicked,然后询问场景哪些项目位于鼠标光标下。

这应该让你在那里:

import pyqtgraph as pg

w = pg.GraphicsWindow()
for i in range(4):
    w.addPlot(0, i)

def onClick(event):
    items = w.scene().items(event.scenePos())
    print "Plots:", [x for x in items if isinstance(x, pg.PlotItem)]

w.scene().sigMouseClicked.connect(onClick)

答案 1 :(得分:0)

一个非常简单的替代方法是使用 lambda 函数:

q_label = QLabel("MyLabel)
q_label.mousePressEvent = lambda e: on_name_clicked(q_label)


def on_name_clicked(self, q_label):
    print(q_label.text())