sid*_*dsp 0 python tkinter graph matplotlib tkinter-canvas
我在 Tkinter 中嵌入 MatPlotLib 图形时遇到了问题,在 Google 和 MatPlotLib 网站上进行了一些搜索后,我能得到的最好的方法是标准方法:
import tkinter
from matplotlib.backends.backend_tkagg import (
FigureCanvasTkAgg, NavigationToolbar2Tk)
fig = Figure(figsize=(5, 4), dpi=100)
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)
toolbar = NavigationToolbar2Tk(canvas, root) toolbar.update()
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试用 .grid 替换打包布局(并删除 .pack() 参数),我会收到一堆错误,并且无论我尝试了多少次 Google 搜索,嵌入 MatPlotLib 的所有方法Tkinter 中的图仅使用 pack 方法。有人可以帮我解决这个问题吗?我想嵌入图形,但使用网格方法,因为我的 GUI 应用程序的其余布局是 .grid 布局。
我在 Tkinter 中的导航工具栏遇到的另一个问题是导航工具栏显然可以自定义(至少根据SentDex [5:18])。他似乎没有详细说明我如何做到这一点,这对我来说很困难,因为我对 MatPlotLib 的按钮不太满意(它们看起来非常古老和过时)。
有人可以帮我解决这个问题吗?当我只放入图表时,它似乎工作得很好,但是当我尝试将图表放入导航工具栏时,我也会遇到问题。对此的任何帮助将不胜感激。谢谢!
这是一个仅使用几何管理器的plot简单navigation toolbar内部 tkinter 。windowgrid
import tkinter as tk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk)
window = tk.Tk()
btn = tk.Label(window, text='A simple plot')
btn.grid(row=0, column=0, padx=20, pady=10)
x = ['Col A', 'Col B', 'Col C']
y = [50, 20, 80]
fig = plt.figure(figsize=(4, 5))
plt.bar(x=x, height=y)
# You can make your x axis labels vertical using the rotation
plt.xticks(x, rotation=90)
# specify the window as master
canvas = FigureCanvasTkAgg(fig, master=window)
canvas.draw()
canvas.get_tk_widget().grid(row=1, column=0, ipadx=40, ipady=20)
# navigation toolbar
toolbarFrame = tk.Frame(master=window)
toolbarFrame.grid(row=2,column=0)
toolbar = NavigationToolbar2Tk(canvas, toolbarFrame)
window.mainloop()
Run Code Online (Sandbox Code Playgroud)
输出图形用户界面

我没有致力于自定义导航工具栏,因此我没有包含该部分的任何解决方案。但如果我发现有用的东西,我一定会调查并更新你。希望您觉得这有帮助。