对Tkinter术语的困惑

问题描述

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

解决方法

您从窗口开始。

window = Tk()

通常人们称窗口根为根,但可以将其分配给任何变量名。 画布对象必须具有关联的窗口对象。

my_canvas = Canvas(window)

canvas小部件是绘图空间的一种表示形式,因此它具有不同的方法可以进行编辑。该窗口只能添加窗口小部件。

我对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窗口中轻松包含matplotlib图形,您必须创建一个既与图形又与窗口相关联的特殊Canvas对象。

在Tkinter中,层次结构是从窗口开始并向其中添加“窗口小部件”。 Canvas()对象是一个小部件; FigureCanvasTkAgg()是一个对象,但不是小部件。 FigureCanvasTkAgg()。get_tk_widget()是一个对象,该对象具有已应用的方法,该方法返回一个小部件,然后Tkinter可以使用该小部件。 plt.Figure()是从matplotlib创建的对象。

对于体系结构,Tkinter是tcl Tk的包装,tcl是创建gui的跨平台工具包。 Matplotlib使用GTK +,这几乎是同一件事,但实现方式却不同。它们是带有matplotlib的独立实体,其中包括一个可以弥补差距的后端。

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