2017-09-12 882 views
0

我试图开发一个GUI,允许在PlotWidget中跟踪鼠标坐标,并在主窗口中的其他地方显示标签。我曾多次尝试模拟pyqtgraph文档中的十字准线示例,但未能同意执行此操作。难度的一部分是我无法理解如何访问我可以在QtDesigner中启用的鼠标跟踪。在pyqtgraph中显示坐标?

我试图使用:

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类中,还是在它之外?

+0

我有一段时间没有使用过PyQtGraph,但你似乎在重复你的连接。 'SignalProxy'应该已经等同于'... .sigMouseMoved.connect(...)'。此外,鼠标跟踪应该发生在pyqtgraph图部件中。我不认为你在QtDesigner上激活的其他选项存在任何关系。这种工作方式可能是任何SIGNAL/SLOT工作的方式。每次移动鼠标时SignalProxy都会发送一个信号,并运行您为连接实施的任何方法。这不是实时的,只能在鼠标移动时才启动。 – armatita

+0

是的,这似乎是正确的。但是,我无法正确写入“更新程序”,因此无法连接到信号/插槽输出端(我只能在移动鼠标时才能确认这一点),这就是当我收到错误信息时)更新代码中的标签? – Jmegan042

+0

显然你在移动鼠标时正在访问该方法。它只是在事后发生(可能在连接的方法内)。什么是错误信息?究竟哪部分代码崩溃? – armatita

回答

0

我能得到更新通过做工作如下:

IN THE setupUi功能:

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是一个标签。我花了很长时间才弄清楚如何在设计人员的GUI中使用它。 pyqt4和pyqt5之间似乎有一个Qpointf的变化,新Qpointf不允许索引。通过传递evt变量,可以在不调用evt[0]的情况下映射它。