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

Posted

技术标签:

【中文标题】通过鼠标使用 PyQwt 从画布上记录曲线/多边形【英文标题】:Recording a curve / polygon from canvas with PyQwt via Mouse 【发布时间】:2013-08-13 12:20:02 【问题描述】:

我试图让用户通过鼠标单击并释放在我的绘图画布上绘制一条曲线,以在释放鼠标后发出信号并将点数组发送到另一个方法以进行进一步处理。

现在我的代码如下所示:

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)

问题是,QwtPolygon 发送到 onDrawing 方法只得到 2 分。第一次单击鼠标的点与第二次单击鼠标的点之间的直线的起点和终点。

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于通过鼠标使用 PyQwt 从画布上记录曲线/多边形的主要内容,如果未能解决你的问题,请参考以下文章

canvas 鼠标绘图

如何使用javascript HTML5画布通过N个点绘制平滑曲线?

使用 html5 画布将图像剪辑成多边形的可重用函数

使用鼠标在 python tkinter 画布上绘制并获取指向列表的点?

如何生成“厚”贝塞尔曲线?

如何在 HTML5 画布上绘制多边形?