matplotlib鼠标事件绘制圆

#coding=utf8importmatplotlib.pyplotasplt#importmatplotlib.animationasanimationimportnumpyasnpimportmatplotlib.linesaslinesfromcreat_polygonimportcreatpolygonfrommatplotlib.widgetsimportCursorfrommatplotlib.patchesimportEllipse,Rectanglefrommatplotlibimporttextfrommatplotlib.backends.backend_qt5aggimportFigureCanvasQTAggasFigureCanvasfrommatplotlib.figureimportFigureclassonclick_draw_circl():'''鼠标绘制椭圆、圆形,鼠标点击按下处为中心,移动鼠标椭圆变化,释放鼠标完成绘图,该为绘图类,应用是需输入fig窗口aritst。如果同时按下shift则绘制圆'''def__init__(self,myfig):self.fig=myfigself.ax=plt.gca()self.connectall()self.onpress=Falseself.cl=[]print(myfig)defconnectall(self):self.cid1=self.fig.canvas.mpl_connect('button_press_event',self.btpress)self.cid2=self.fig.canvas.mpl_connect('motion_notify_event',self.btmotion)self.cid3=self.fig.canvas.mpl_connect('button_release_event',self.btrelease)defbtpress(self,event):self.x0=event.xdataself.y0=event.ydataself.onpress=Trueprint(self.x0,self.y0)defbtmotion(self,event):ifself.onpress:self.x=event.xdataself.y=event.ydatadltx=abs(self.x-self.x0)*2dlty=abs(self.y-self.y0)*2ifevent.key=="shift":#若果同时按下shift键则绘制圆,dlty=dltxdlty=dltxiflen(self.cl)!=0:temph=self.cl.pop()temph.remove()#self.hands.remove()self.hands=Ellipse(xy=(self.x0,self.y0),width=dltx,height=dlty,fill=False,alpha=0.9,picker=5)self.hands.set(linewidth=1.5,edgecolor="r")self.ax.add_patch(self.hands)self.cl.append(self.hands)plt.gca().figure.canvas.draw()#重绘画布图像self.cl.append(self.hands)defbtrelease(self,event):self.onpress=Falseself.cl[:]=[]defdisconnectall(self):self.fig.canvas.mpl_disconnect(self.cid1)self.fig.canvas.mpl_disconnect(self.cid2)self.fig.canvas.mpl_disconnect(self.cid3)if__name__=='__main__':fig=plt.figure()#fig=Figure(figsize=(7,4),dpi=100,facecolor="w")ax=fig.add_subplot(111)pgon=plt.Polygon(([0.15,0.15],[0.35,0.4],[0.2,0.6],[0.3,0.2]),picker=5,closed=False)plt.gca().add_patch(pgon)line,=ax.plot(np.random.rand(20),np.random.rand(20),'o-',picker=5)#aa=Cursor(ax,color='g',lw=1,useblit=True,horizOn=True)tempc=onclick_draw_rectangle(fig)plt.show()

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

文秘专家
机构认证
内容提供者

1

确认删除?