2017-05-07 1 views
0

Je suis un nouveau pyqtgraph utilisateurs, essayez de "Intégration de widgets dans les applications PyQt" en suivant les instructions dans http://www.pyqtgraph.org/documentation/how_to_use.html. Dans mon exemple, je fais la promotion de la vue graphique à PlotWidget, puis enregistrer en tant que « test2.ui », également suivre l'exemple « interaction crosshair/souris », mon code:comment obtenir la position de la souris dans

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_()) 

il semble ne pas obtenir l'événement déplacement de la souris; après changement proxy = pg.SignalProxy (self.view.scene(). SigMouseMoved, RateLimit = 60, slot = self.mouseMoved) à self.view.scene(). SigMouseMoved.connect (self.mouseMoved), sortie "MouseTest", mais programme imediatly accident. peut me donner une aide

Répondre

0

Deux choses:

Re: Crashing Il semble que si vous ne l'avez pas placé une étiquette dans l'interface graphique pour modifier, peut-être votre code est de voir cela et donne le coup en arrière à toi. Si vous utilisez qtDesigner, il est probablement défini comme self.label, et dans mon interface graphique, j'ai été obligé d'utiliser self.label pour le référencer. Re: mouseMoved fonction Je luttais juste avec un problème similaire de cela ne fonctionne pas. J'ai réussi à faire fonctionner le mien en changeant le evt[0] en simply evt, quelque chose que je pense qu'ils sont passés de pyqt4 à pyqt5.

Voici un exemple de ce que j'ai pu se rendre au travail:

.......... code de configuration ci-dessus ... dans la fonction 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 ..... 

En Dans mon cas, je n'ai pas passé l'instruction de proxy, et je me suis contenté de passer à sigMouseMoved car il transmet déjà les informations que le proxy aurait. Je pense que c'était dans l'exemple de pyqt5 (et commenté) parce que c'était le changement. Cependant, le commentaire n'a pas précisé cela.