关于这个绘制可拖动矩形的 matplotlib 示例,我尝试对多边形做同样的事情。
到目前为止,我能够绘制一个多边形并将其拖到画布上的某个位置。如果我释放鼠标按钮,我将无法再次移动多边形,这就是我的问题。我想尽可能多地通过每次鼠标按下来拖放多边形。
我还注意到,在移动多边形后,我仍然可以单击多边形曾经所在的位置并再次拖动它。所以初始geometry必须保存在某个地方,但我想它应该被覆盖。
编辑:正如下面评论中所建议的,我将添加一个补丁而不是一个集合,因为我只会绘制一个多边形(请参阅旧代码注释掉)。此外,我关闭了多边形以演示您只能通过单击多边形内部而不是单击其边缘来拖动补丁。
如果我想再次拖动多边形,它会自动跳回其初始位置。
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
#from matplotlib.collections import PatchCollection
class DraggablePolygon:
lock = None
def __init__(self, polygon):
self.poly = polygon
self.press = None
def connect(self):
'connect to all the events we need'
self.cidpress = self.poly.figure.canvas.mpl_connect(
'button_press_event', self.on_press)
self.cidrelease = self.poly.figure.canvas.mpl_connect(
'button_release_event', self.on_release)
self.cidmotion = self.poly.figure.canvas.mpl_connect(
'motion_notify_event', self.on_motion)
def on_press(self, event):
'on button press we will see if the mouse is over us and store some data'
if event.inaxes != self.poly.axes: return
if DraggablePolygon.lock is not None: return
contains, attrd = self.poly.contains(event)
if not contains: return
x0, y0 = geometry[0]
self.press = x0, y0, event.xdata, event.ydata
DraggablePolygon.lock = self
我假设geometryand的定义newGeometry必须在代码中的不同位置,但经过几次尝试后我找不到有效的解决方案。有没有人发现我犯的错误?
牧羊人nacy
相关分类