Отображать координаты в pyqtgraph?

Я пытаюсь разработать графический интерфейс, который позволяет отслеживать координаты мыши в PlotWidget и отображать метку в другом месте главного окна. Я несколько раз пытался эмулировать пример перекрестия в документации pyqtgraph, но не смог заставить его согласиться сделать это. Частично сложность заключается в том, что я не могу понять, как получить доступ к отслеживанию мыши, которое я могу включить в QtDesigner.

Я попытался использовать:

proxy = pg.SignalProxy(Plotted.scene().sigMouseMoved, rateLimit=60, slot=mouseMoved)
Plotted.scene().sigMouseMoved.connect(mouseMoved)

Однако я не совсем понимаю, что позволяет "обновлять" это в реальном времени, и на каком уровне я должен иметь это утверждение. Если

def mouseMoved(evt):
    pos = evt[0]
    if Plotted.sceneBoundingRect().contains(pos):
       mousePoint = vb.mapSceneToView(pos)
       index = int(mousePoint.x())
       if index > 0 and index < len(x):
          mousecoordinatesdisplay.setText("<span style='font-size: 12pt'>x=%0.1f, <span style='color: red'>y1=%0.1f</span>" % (mousePoint.x(), y[index], data2[index]))
          vLine.setPos(mousePoint.x())
          hLine.setPos(mousePoint.y()) 

часть кода находиться в классе Ui_MainWindow или вне его?

2 ответа

Я смог заставить работать обновления, выполнив следующие действия:

В функции настройки:

Plotted = self.plot
vLine = pg.InfiniteLine(angle=90, movable=False)
hLine = pg.InfiniteLine(angle=0, movable=False)
Plotted.addItem(vLine, ignoreBounds=True)
Plotted.addItem(hLine, ignoreBounds=True)
Plotted.setMouseTracking(True)
Plotted.scene().sigMouseMoved.connect(self.mouseMoved)

def mouseMoved(self,evt):
        pos = evt
        if self.plot.sceneBoundingRect().contains(pos):
            mousePoint = self.plot.plotItem.vb.mapSceneToView(pos)
            self.mousecoordinatesdisplay.setText("<span style='font-size: 15pt'>X=%0.1f, <span style='color: black'>Y=%0.1f</span>" % (mousePoint.x(),mousePoint.y()))
        self.plot.plotItem.vLine.setPos(mousePoint.x())
        self.plot.plotItem.hLine.setPos(mousePoint.y()

Где.mousecoordinatedisplay это ярлык. Мне потребовалось целую вечность, чтобы понять, как это сделать с использованием графического интерфейса от дизайнера. Похоже, что между pyqt4 и pyqt5 произошло изменение по сравнению с Qpointf, где новый Qpointf не допускает индексацию. Просто передавая evt переменная, это можно отобразить без вызова evt[0],

Изменена функция MouseMoved, чтобы ограничить точность отображаемых чисел для моего приложения:

          def MouseMoved(self, evt):
        pos = evt
        if self.graphWidget.sceneBoundingRect().contains(pos):
            mousePoint = self.graphWidget.plotItem.vb.mapSceneToView(pos)
            x = float("{0:.3f}".format(mousePoint.x()))
            y = float("{0:.3f}".format(mousePoint.y()))
            self.xylabel.setText(f"Cursor Position: {x, y})
Другие вопросы по тегам