我正在使用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
答案 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())