通过鼠标使用 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 从画布上记录曲线/多边形的主要内容,如果未能解决你的问题,请参考以下文章
如何使用javascript HTML5画布通过N个点绘制平滑曲线?