【问题标题】:how to get mouse position in如何获取鼠标位置
【发布时间】:2017-09-13 01:09:52
【问题描述】:

我是一个新的 pyqtgraph 用户,请按照http://www.pyqtgraph.org/documentation/how_to_use.html 中的说明尝试“在 PyQt 应用程序中嵌入小部件”。在我的示例中,我将图形视图提升为 PlotWidget,然后另存为“test2.ui”,也遵循“十字准线/鼠标交互”示例,我的代码:

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, rateLimit=60, slot=self.mouseMoved) 至 self.view.scene().sigMouseMoved.connect(self.mouseMoved), 输出“MouseTest”,但程序立即崩溃。 谁能帮帮我

【问题讨论】:

    标签: mousemove pyqtgraph


    【解决方案1】:

    两件事:

    回复:崩溃 好像您没有在 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 的示例中(并已注释掉),因为这是更改。但是,评论并没有具体说明这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多