Python 通过鼠标使用PyQwt从画布记录曲线/多边形

Python 通过鼠标使用PyQwt从画布记录曲线/多边形,python,qt,qwt,Python,Qt,Qwt,我试图让用户通过鼠标点击和释放在绘图画布上绘制一条曲线,在释放鼠标后发出信号,并将点阵列发送给另一种方法进行进一步处理 现在,我的代码如下所示: self.plotPicker = Qwt.QwtPlotPicker(Qwt.QwtPlot.xBottom, Qwt.QwtPlot.yLeft, Qwt.QwtPicker.PolygonSelection, Qwt.QwtPlotPicker.PolygonRubberBand, Qwt.QwtPicker.AlwaysOn, plot.can

我试图让用户通过鼠标点击和释放在绘图画布上绘制一条曲线,在释放鼠标后发出信号,并将点阵列发送给另一种方法进行进一步处理

现在,我的代码如下所示:

self.plotPicker = Qwt.QwtPlotPicker(Qwt.QwtPlot.xBottom, Qwt.QwtPlot.yLeft, Qwt.QwtPicker.PolygonSelection, Qwt.QwtPlotPicker.PolygonRubberBand, Qwt.QwtPicker.AlwaysOn, plot.canvas())
self.plotPicker.setRubberBandPen(QPen(Qt.green))
self.plotPicker.setTrackerPen(QPen(Qt.cyan))
self.connect(self.plotPicker, SIGNAL('selected(const QwtPolygon&)'), self.onDrawing)
def trackerText(self, point):

    if _record:
        self.recording = True
        pos = self.invTransform(point)  
        if(len(self.recorded_data)):
            if(eucliddist((pos.x(), pos.y()), self.recorded_data[-1]) > 0.0):
                self.recorded_data.append((pos.x(), pos.y()))
        else:
            self.recorded_data.append((pos.x(), pos.y()))            
问题是,
QwtPolygon
发送到
onDrawing
方法只能得到2分。第一次单击鼠标的点与第二次单击鼠标的点之间的直线的起点和终点


是否可以通过Qwt中的方法记录任意形状和多边形(由于python的使用,版本5)

好的,我通过重载
QwtPlotPicker
解决了这个问题,记录了
trackerText
返回的所有坐标,然后进行了一些采样。看起来像这样:

self.plotPicker = Qwt.QwtPlotPicker(Qwt.QwtPlot.xBottom, Qwt.QwtPlot.yLeft, Qwt.QwtPicker.PolygonSelection, Qwt.QwtPlotPicker.PolygonRubberBand, Qwt.QwtPicker.AlwaysOn, plot.canvas())
self.plotPicker.setRubberBandPen(QPen(Qt.green))
self.plotPicker.setTrackerPen(QPen(Qt.cyan))
self.connect(self.plotPicker, SIGNAL('selected(const QwtPolygon&)'), self.onDrawing)
def trackerText(self, point):

    if _record:
        self.recording = True
        pos = self.invTransform(point)  
        if(len(self.recorded_data)):
            if(eucliddist((pos.x(), pos.y()), self.recorded_data[-1]) > 0.0):
                self.recorded_data.append((pos.x(), pos.y()))
        else:
            self.recorded_data.append((pos.x(), pos.y()))