python – matplotlib在tkinter画布中的缩放功能
发布时间:2020-12-16 21:29:58 所属栏目:Python 来源:网络整理
导读:我一直试图在GUI后面传递一些脚本(使用Tkinter),到目前为止,已经使得任何打开的数据都显示在Tkinter画布中(使用matplotlib绘制它). 我唯一的问题是matplotlib中的标准缩放/滚动(使用鼠标左键“移动”绘图和鼠标右键“缩放”)在画布中无法访问,基本上是功能ma
我一直试图在GUI后面传递一些脚本(使用Tkinter),到目前为止,已经使得任何打开的数据都显示在Tkinter画布中(使用matplotlib绘制它).
我唯一的问题是matplotlib中的标准缩放/滚动(使用鼠标左键“移动”绘图和鼠标右键“缩放”)在画布中无法访问,基本上是功能matplotlib绘图窗口中的’4尖十字’. 我认为这需要创建我自己的处理程序,但我认为必须有一种方法来使用matplotlib的默认处理程序?我也看过this问题中提到的’滚动’画布选项,但那些似乎只是改变了绘图区域的大小而不是放大/缩小数据,我也不想再添加任何按钮来操纵情节区. 我目前最简单的代码: #! /usr/bin/env python from Tkinter import * import matplotlib.pyplot as plt import matplotlib.backends.backend_tkagg as tkagg import tkFileDialog class App(): def __init__(self,master): # VARIABLES self.inputFile = "" self.fig = plt.Figure() self.canvas = tkagg.FigureCanvasTkAgg(self.fig,master = master) self.canvas.get_tk_widget().pack() self.canvas.draw() # FRAME frame = Frame(master) master.title("MassyTools 0.1.1 (Alpha)") # VARIABLE ENTRIES # BUTTONS # MENU menu = Menu(root) root.config(menu = menu) filemenu = Menu(menu) menu.add_cascade(label="File",menu=filemenu) filemenu.add_command(label="Open Input File",command = self.openFile) calibmenu = Menu(menu) menu.add_cascade(label="Calibrate",menu=calibmenu) calibmenu.add_command(label="Open Calibration File",command = self.openCalibrationFile) calibmenu.add_command(label="Calibrate",command = self.calibrateData) def openFile(self): file_path = tkFileDialog.askopenfilename() setattr(self,'inputFile',file_path) data = self.readData() self.plotData(data) def openCalibrationFile(self): print "Place holder for selection of the calibration file" def calibrateData(self): print "Place holder for actual calibration" def readData(self): x_array = [] y_array = [] with open(self.inputFile,'r') as fr: for line in fr: line = line.rstrip('n') values = line.split() x_array.append(float(values[0])) y_array.append(float(values[1])) return zip(x_array,y_array) def plotData(self,data): x_array = [] y_array = [] for i in data: x_array.append(i[0]) y_array.append(i[1]) self.fig.clear() self.axes = self.fig.add_subplot(111) self.line,= self.axes.plot(x_array,y_array) self.canvas.draw() # Stuff that is not being used now but can be useful """def openFile(self,number): name = tkFileDialog.askopenfilename() ops = { 1: 'deglycoData',2: 'peptideFile',3: 'mzML' } setattr(self,ops[number],name) """ # End of 'stuff' root = Tk() app = App(root) root.mainloop() 解决方法
因此,您可以将一个NavigationToolbar2TkAgg对象添加到画布中,该对象将为您提供所有正常的matplotlib方法和工具.
import matplotlib.backends.backend_tkagg as tkagg # canvas is your canvas,and root is your parent (Frame,TopLevel,Tk instance etc.) tkagg.NavigationToolbar2TkAgg(canvas,root) 它的一个很好的例子可以在这里找到:Updating a graphs coordinates in matplotlib. 并且可以在here找到如何向其添加自定义方法的示例(请参阅类NavSelectToolbar(NavigationToolbar2TkAgg)). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |