python – Matplotlib拖放文件
发布时间:2020-12-20 13:43:06 所属栏目:Python 来源:网络整理
导读:我希望能够在我的Matplotlib图上拖放一个文件,并对所述文件做一些事情(比如打开并绘制它!).不幸的是,我的脚本使用以下方法处理一些事件: ????fig.canvas.mpl_connect(‘button_release_event’,self.btn_release) 等等,我找不到任何会返回放在它上面的文件
我希望能够在我的Matplotlib图上拖放一个文件,并对所述文件做一些事情(比如打开并绘制它!).不幸的是,我的脚本使用以下方法处理一些事件:
????fig.canvas.mpl_connect(‘button_release_event’,self.btn_release) 等等,我找不到任何会返回放在它上面的文件路径的东西. 我还没有达到我想用嵌入式图创建GUI的水平,所以如果有一个没有这样做的解决方案,我宁愿这样做. 解决方法
你似乎希望drop_file_event由mpl_connect处理;不幸的是,根据
documentation的情况并非如此(无论如何,这是一个通用绘图库的具体情况).
但是,实现自己的GUI处理drop事件并不困难.下面是一个主要基于embedding_in_wx2并添加wx.FileDropTarget的示例. # Used to guarantee to use at least Wx2.8 import wxversion wxversion.ensureMinimal('2.8') import numpy as np import wx import matplotlib matplotlib.use('WXAgg') from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas from matplotlib.backends.backend_wx import NavigationToolbar2Wx from matplotlib.figure import Figure class MyFileDropTarget(wx.FileDropTarget): def __init__(self,window): wx.FileDropTarget.__init__(self) self.window = window def OnDropFiles(self,x,y,filenames): fig = self.window.figure inaxes = fig.get_axes()[0] h_pix = int(fig.get_figheight() * fig.get_dpi()) # fig height in pixels message = "%d file(s) dropped at (%d,%d):n" % (len(filenames),y) for file in filenames: message += file + "n" inaxes.annotate(message,(x,h_pix-y),xycoords='figure pixels') self.window.draw() class CanvasPanel(wx.Panel): def __init__(self,parent): wx.Panel.__init__(self,parent) self.figure = Figure() self.axes = self.figure.add_subplot(111) self.canvas = FigureCanvas(self,-1,self.figure) self.sizer = wx.BoxSizer(wx.VERTICAL) self.sizer.Add(self.canvas,1,wx.LEFT | wx.TOP | wx.GROW) self.SetSizer(self.sizer) self.add_toolbar() self.Fit() win_target = self.canvas dt = MyFileDropTarget(win_target) win_target.SetDropTarget(dt) def draw(self): t = np.linspace(0.0,2.,100) s = np.sin(2 * np.pi * t) self.axes.plot(t,s) def add_toolbar(self): self.toolbar = NavigationToolbar2Wx(self.canvas) self.toolbar.Realize() if wx.Platform == '__WXMAC__': # Mac platform (OSX 10.3,MacPython) does not seem to cope with # having a toolbar in a sizer. This work-around gets the buttons # back,but at the expense of having the toolbar at the top self.SetToolBar(self.toolbar) else: # On Windows platform,default window size is incorrect,so set # toolbar width to figure width. tw,th = self.toolbar.GetSizeTuple() fw,fh = self.canvas.GetSizeTuple() # By adding toolbar in sizer,we are able to put it at the bottom # of the frame - so appearance is closer to GTK version. # As noted above,doesn't work for Mac. self.toolbar.SetSize(wx.Size(fw,th)) self.sizer.Add(self.toolbar,wx.LEFT | wx.EXPAND) # update the axes menu on the toolbar self.toolbar.update() if __name__ == "__main__": app = wx.PySimpleApp() frame = wx.Frame(None,title='File drop test') panel = CanvasPanel(frame) panel.draw() frame.Show() app.MainLoop() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |