对 Tkinter 术语的混淆

confusion over Tkinter terminology

在构建 Tkinter GUI 时,我对根 window、图形、后端和 canvas 之间的区别感到困惑。据我所知,canvas 是艺术家可以在其上绘制并附在图形上的东西。这很有帮助,但我无法理解 window/fig/backends 和 canvas 的区别或层次结构是什么:http://www.aosabook.org/en/matplotlib.html

您从 window 开始。

window = Tk()

通常人们称 window 为根,但它可以分配给任何变量名。 canvas 对象必须有关联的 window 对象。

my_canvas = Canvas(window)

canvas 小部件是绘图 space 的表示,因此它具有不同的方法来允许对其进行编辑。 window 只能添加小部件。

我对 matplotlib 不是很熟悉,但它似乎是与 Tkinter 交互的东西。

from tkinter import *
import matplotlib.pyplot as plt  
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

window = Tk()
my_figure = plt.Figure()
chart = FigureCanvasTkAgg(my_figure, window)

如您所见,要在 Tkinter window 中轻松包含 matplotlib 图,您必须创建一个特殊的 Canvas 对象,该对象既与图相关联又与 window 相关联。

在 Tkinter 中,层次结构是从 window 开始并向其添加“小部件”。 Canvas() 对象是一个小部件; FigureCanvasTkAgg() 是一个对象,但它不是一个小部件。 FigureCanvasTkAgg().get_tk_widget() 是一个对象,它应用了一种方法,returns 一个小部件,然后可以被 Tkinter 使用。 plt.Figure() 是从 matplotlib 创建的对象。

至于体系结构,Tkinter 是 tcl Tk 的包装器,它是用于创建 guis 的跨平台工具包。 Matplotlib 使用 GTK+,这几乎是同一件事,但实现不同。它们是带有 matplotlib 的独立实体,包括用于弥合差距的后端。

您可能会发现本教程很有帮助。 https://datatofish.com/matplotlib-charts-tkinter-gui/