m0_54212618 2023-03-20 21:41 采纳率: 63.6%
浏览 22
已结题

pyqtgpraph item无法拖动问题和无法触发事件

最近使用pyqtgraph写一点东西,想要通过鼠标拖动图元。
主要代码如下:

        self.parabolic_w = pg.PlotWidget()  # 锥镜
        self.parabolic_w.setAspectLocked()
        self.parabolicLayout.addWidget(self.parabolic_w)

        self.basic_profile_data = self.parabolic_w.plot((0,))  # 基本轮廓数据
        self.parabolic_w.addItem(self.basic_profile_data)
        self.basic_profile_data.setFlag(QGraphicsItem.ItemIsSelectable)
        self.basic_profile_data.setFlag(QGraphicsItem.ItemIsMovable)
        self.basic_profile_data.setAcceptDrops(True)
        self.basic_profile_data.setData(p.basic_profile)   # p.basic_profile 是numpy ndarry数据,在别处已生成,这里就只是简单贴过来演示
        self.basic_profile_data.sigClicked.connect(self.c)
        self.parabolic_center_data = self.parabolic_w.plot((0,0),(-0.1,3.1),pen=pg.mkPen(color='r', style=QtCore.Qt.DashDotLine))  # 注意线条笔刷
        self.parabolic_center_data.sigClicked.connect(self.c)

得到的图如下:

img

如上图,我想拖动白色线条却无法拖动,而且我点击该线条或者点击红色中心线,sigClicked的信号也没有被触发。
请教各位是怎么回事?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-03-27 17:24
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/1095002
    • 这篇博客你也可以参考下:解决决策树可视化时python3.6没有PyGraphviz的问题
    • 这篇博客也不错, 你可以看下解决决策树可视化时python3.6没有PyGraphviz的问题
    • 除此之外, 这篇博客: python 滤波中的 使用pyqtgraph库实现数据可视化之逐点刷新波形图 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      加上滤波

      import pyqtgraph as pg
      import numpy as np
      import array
      from scipy import signal
      
      b, a = signal.butter(3, 0.05)
      zi = signal.lfilter_zi(b, a)
      dss = zi
      
      app = pg.mkQApp()
      data = array.array('d')
      data2 = array.array('d')
      data3 = array.array('d')
      # print(data)
      N = 200
      win = pg.GraphicsWindow()
      win.setWindowTitle(u'pyqtgraph逐点画波形图')
      win.resize(500,300)
      
      p = win.addPlot()
      p.showGrid(x=True,y=True)
      p.setRange(xRange=[0,N-1],yRange=[-1.2,1.2],padding=0)
      p.setLabels(left='y / V',bottom='x / point',title='y = sin(x)')
      
      curve = p.plot(pen='y')
      
      # q = win.addPlot()
      filter_curve = p.plot(pen='y')
      
      filter_curve_2 = p.plot(pen='y')
      idx = 0
      def plotData():
          global idx
          global dss
          global data3
          tmp =signal_xHz(1, 1,50, idx )# np.sin(np.pi / 50 * idx)
      #     print('dss',dss,'tmp',tmp)
          z, dss = signal.lfilter(b, a, tmp, zi=dss)
          if len(data)<N:
              data.append(tmp)      
              data2.append(z)
          else:
              data2[:-1] = data2[1:]
              data2[-1] = z
              data[:-1] = data[1:]
              data[-1] = tmp
              data3 = signal.filtfilt(b, a, data)
          curve.setData(data)
          filter_curve.setData(data2)
          filter_curve_2.setData(data3)
          idx += 1
      def signal_xHz(A, fi,sample, num ):
          return A * np.sin(np.pi * 2 * fi * num / sample )+ np.random.randn(1) * 0.08
      
      timer = pg.QtCore.QTimer()
      timer.timeout.connect(plotData)
      timer.start(30)
      app.exec_()

      filtfilt要多于12个点才能滤波,所以直接200个点后,才使用filtfilt滤波。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月25日
  • 创建了问题 3月20日

悬赏问题

  • ¥15 ssh登录页面的问题
  • ¥60 渗透一个指定银行app,拿到客户信息,需要什么级别
  • ¥50 关于在matlab上对曲柄摇杆机构上一点的运动学仿真
  • ¥15 jetson nano
  • ¥15 :app:debugCompileClasspath'.
  • ¥15 windows c++内嵌qt出现数据转换问题。
  • ¥15 stm32 串口通讯过程中的问题
  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问