2014-12-01 8 views
0

저는 PyQt와 PyQtGraph를 사용하여 비교적 간단한 플로팅 UI를 만들었습니다. 이 일환으로 나는 사용자가 동적으로 PlotItem을 추가 한 graphicsview (pyqtgraph의 graphicslayoutwidget)를 가지고있다.PyQt mousePressEvent - 클릭 한 객체 가져 오기?

내가 뭘 하려는지 사용자가 그것을 두 번 클릭하여 PlotItem을 선택할 수 있습니다.

사용자가 위젯 창에서 두 번 클릭하면 얻을 수있을만큼 간단하지만 클릭 한 항목을 반환하는 방법을 알 수없는 것 같습니다.

대부분의 검색 결과가 특정 누름 단추에 대해 mousePressEvent를 다시 구현하려는 시도가 있습니다. 이벤트 필터에 대해 조금 읽었지만 필요한 해결책이 있는지 확실하지 않습니다.

나는이 질문에 답하는 데 도움이 될만한 다른 정보가 있을지 모르겠다. 그래서 내가 무엇을 묻고 있는지 명확하지 않은 경우 분명히 할 수있다.

편집 :이의

중복 :

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

+0

IT는 X, 클릭의 y 위치를 가지고 충분 :

이것은 당신이 방법이 갈라 도착해야합니까? – 101

+0

widgetAt()와 함께 작동 할 수도 있습니다. – user3014097

+0

실제로 작동하는지 확신 할 수 없습니다. 나는 위젯 안에 임베드 된 객체를 필요로하는 반면, 전반적인 위젯 자체를 되돌려 놓을뿐입니다. – user3014097

답변

3

한 가지 전략은 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) 
+0

Perfect! 고맙습니다. GraphicsScene.sigMouseClicked를 검색하면 스택에있는 다른 사람도 꽤 똑같은 질문을하게됩니다. – user3014097

+0

장면의'items' 함수는 위치에 따라 반환 할 항목을 결정하기 위해 실제 경로 대신 커브의 'boundingRect'를 고려하는 것으로 보입니다. 거기에 대한 알려진 치료법이 있습니까? – architectonic

+0

Qt 문서에는 항목 선택 방법을 결정하는'mode' 인수가 있습니다 : http://doc.qt.io/qt-4.8/qgraphicsscene.html#items-3 – Luke