我需要在一个figureCanvas中有2个可拖动的点.但是我有一个辅助约束:2个点必须用一条线连接起来.当我拖动一个点时,当然(否则不会有趣),必须动态绘制线,并且仍然链接到2个点.

我设法创建了2个可拖动的点,主题是: Matplotlib以交互方式拖动重叠点
我通过FigureCanvas的子类修改了一些代码来使用它(稍后在PyQt应用程序中包含图形):
import matplotlib.pyplot as plt
import matplotlib.patches as patches
class DraggablePoint:
# https://stackoverflow.com/questions/21654008/matplotlib-drag-overlapping-points-interactively
lock = None # only one can be animated at a time
def __init__(self, parent, x=0.1, y=0.1):
self.parent = parent
self.point = patches.Ellipse((x, y), 0.01, 0.03, fc='r', alpha=0.5)
self.x = x
self.y = y
parent.fig.axes[0].add_patch(self.point)
self.press = None
self.background = None
self.connect()
def connect(self):
'connect to all the events we need'
self.cidpress = self.point.figure.canvas.mpl_connect('button_press_event', self.on_press)
self.cidrelease = self.point.figure.canvas.mpl_connect('button_release_event', self.on_release)
self.cidmotion = self.point.figure.canvas.mpl_connect('motion_notify_event', self.on_motion)
def …Run Code Online (Sandbox Code Playgroud)