2017-05-07 5 views
0

나는 새로운 pyqtgraph 사용자입니다. http://www.pyqtgraph.org/documentation/how_to_use.html의 지침에 따라 "PyQt 응용 프로그램 내에 위젯 포함"을 시도하십시오. 내 예제에서 나는 그래픽 다음 저장 "test2.ui"로, PlotWidget에 볼 촉진, 또한, 내 코드를 "십자선/마우스 상호 작용"예를 따르마우스 위치를 얻는 방법

import sys 
import numpy 
from PyQt5 import QtCore, QtGui,uic,QtWidgets 
from PyQt5.QtWidgets import * 
import pyqtgraph as pg 
import os 


hw,QtBaseClass=uic.loadUiType("test.ui") 
def gaussian(A, B, x): 
    return A * numpy.exp(-(x/(2. * B)) ** 2.) 
class MyApp(QtWidgets.QMainWindow, hw): 
    def __init__(self): 
     super().__init__() 
     self.setupUi(self) 
     winSize=self.size() 
     self.view.resize(winSize.width(),winSize.height()) 
     x = numpy.linspace(-5., 5., 10000) 
     y =gaussian(5.,0.2, x) 
     self.p=self.view.plot(x,y) 

     proxy = pg.SignalProxy(self.view.scene().sigMouseMoved, rateLimit=60, slot=self.mouseMoved) 
     self.view.enableAutoRange("xy", True) 

    def mouseMoved(evt): 
     print("mouseTest") 
     mousePoint = self.p.vb.mapSceneToView(evt[0]) 
     label.setText(
      "<span style='font-size: 14pt; color: white'> x = %0.2f, <span style='color: white'> y = %0.2f</span>" % (
     mousePoint.x(), mousePoint.y())) 

if __name__ == "__main__": 
    app = QtWidgets.QApplication(sys.argv) 
    window = MyApp() 
    window.show() 

    sys.exit(app.exec_()) 

이 보인다되지 마우스 이동 이벤트를 얻을; 후 변경 프록시 = pg.SignalProxy (self.view.scene(). sigMouseMoved, 만 부가 = 60 슬롯 = self.mouseMoved) 에 self.view.scene(). sigMouseMoved.connect (self.mouseMoved) "MouseTest"가 출력되지만 프로그램이 즉시 중단됩니다. 어떤 사람은 도움을 나에게

답변

0

두 가지를 제공 할 수 있습니다 :

재 : 을 충돌 그것은 당신이 아마 코드이보고되어, 수정 GUI에서 레이블을 배치하지 않은 것처럼 보인다 다시 차기 너에게. qtDesigner를 사용하고 있다면, 아마도 self.label로 정의되어있을 것이고, 제 GUI에서는 self.label을 사용하여 그것을 참조해야합니다.

Re : mouseMoved 함수 비슷한 문제가 발생하지 않아서 고민했습니다. 나는 evt[0]simply evt으로 바꾸어서 내 일을 할 수 있었다. 나는 그들이 pyqt4에서 pyqt5로 옮겼다 고 생각한다. setupUi 기능에 ... 위의

.......... 설정 코드 : 여기

내가 일을 얻을 수 있었는지의 예

..........setup code above... 
     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.label.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() 
...the if__name__ =="__main__": function ..... 

에서 내 경우 프록시 구문을 전달하지 않았고 프록시 대신 정보를 이미 전달 했으므로 대신 sigMouseMoved를 사용했다. 이것은 pyqt5의 예제에있는 것으로 생각합니다 (그리고 주석 처리 된 것입니다). 그러나이 논평은 구체적으로 언급하지 않았다.

관련 문제