【问题标题】:confusion over Tkinter terminology对 Tkinter 术语的混淆
【发布时间】:2021-01-09 14:05:34
【问题描述】:

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

【问题讨论】:

    标签: python matplotlib tkinter canvas figure


    【解决方案1】:

    你从窗口开始。

    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 的包装器,它是一个用于创建 gui 的跨平台工具包。 Matplotlib 使用 GTK+,这几乎是一样的东西,但实现方式不同。它们是带有 matplotlib 的独立实体,包括一个弥合差距的后端。

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

    【讨论】:

    • 人们称它为root 的原因是它实际上是一个根窗口。小部件存在于树状结构中,这是该树的根。每个应用都需要一个根窗口。
    猜你喜欢
    • 2019-02-19
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多