gpt4 book ai didi

python - matplotlib 在 tkinter Canvas 中的缩放功能

转载 作者:太空狗 更新时间:2023-10-30 01:15:17 26 4
gpt4 key购买 nike

我一直在尝试将一些脚本转移到 GUI 后面(使用 Tkinter),到目前为止,任何打开的数据都显示在 Tkinter Canvas 中(使用 matplotlib 绘制它)。

我遇到的唯一问题是 matplotlib 中的标准缩放/滚动(使用鼠标左键“移动”绘图,使用鼠标右键“缩放”)在 Canvas 中无法访问,基本上matplotlib 绘图窗口中“4 尖十字”的功能。

我认为这需要创建我自己的处理程序,但我认为必须有一种方法可以使用 matplotlib 的默认处理程序?我还查看了 this 中提到的“滚动” Canvas 选项。问题,但这些似乎只是改变绘图区域的大小而不是放大/缩小数据,而且我不想添加任何其他按钮来操纵绘图区域。

我目前拥有的最低限度代码:

#! /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 对象附加到您的 Canvas 上,这将为您提供所有正常的 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 (参见 class NavSelectToolbar(NavigationToolbar2TkAgg))。

关于python - matplotlib 在 tkinter Canvas 中的缩放功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22762248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com