在 Tkinter [.grid 方法] 中嵌入 MatPlotLib 图形,并自定义 MatPlotLib 的导航工具栏

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 的按钮不太满意(它们看起来非常古老和过时)。

有人可以帮我解决这个问题吗?当我只放入图表时,它似乎工作得很好,但是当我尝试将图表放入导航工具栏时,我也会遇到问题。对此的任何帮助将不胜感激。谢谢!

Som*_*ury 9

这是一个仅使用几何管理器的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)

输出图形用户界面

阴谋

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