【问题标题】:Displaying matplotlib inside Tkinter在 Tkinter 中显示 matplotlib
【发布时间】:2018-03-02 02:43:07
【问题描述】:

我有读取 Excel 文件并绘制它的 matplotlib 脚本。 (作为 MATPLOT)

我制作了另一个 python 脚本,看起来像一个普通程序(顶部菜单、状态栏..)(作为 GUI)

我想在我的 GUI 中显示 MATPLOT。有什么方法可以调用 MATPLOT 中的所有脚本在 GUI 中运行?就像将视频嵌入到另一个网站一样。

root = Tk()
root.geometry("800x600")

#MENU
topMenu = Menu(root)
root.config(menu=topMenu)

loadMenu = Menu(topMenu, tearoff=0)
topMenu.add_cascade(label="File", menu=loadMenu)
loadMenu.add_command(label="Import New", command=doNothing)
loadMenu.add_command(label="Show 'Filter' Menu" , command=showOptions)
loadMenu.add_separator()
loadMenu.add_command(label="Exit", command=root.quit)

#GRAPH
#

#StatusBar
status = Label(root, text="File Name:", bd=1, relief=SUNKEN, anchor=W)
status.pack(side=BOTTOM, fill=X)

root.mainloop()

【问题讨论】:

    标签: python matplotlib tkinter


    【解决方案1】:

    如何在 tkinter 框架中嵌入 matplotlib 图

    该方法提供了子类tk.Framematplotlib.figure.Figure,以便将代码重用于其他目的。

    它创建了一个tkFrame,所有样板都准备好接受并显示一个matplotlib Figure
    然后它会创建一个Figure(同样,可以修改和扩展),并将其嵌入到上面创建的tk.Frame 中。
    最后,它启动tk.mainloop

    import matplotlib
    import tkinter as tk
    
    matplotlib.use('TkAgg')
    # from matplotlib import style
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
    from matplotlib.figure import Figure
    
    
    class GraphPage(tk.Frame):
    
        def __init__(self, parent):
            tk.Frame.__init__(self, parent)
            self.title_label = tk.Label(self, text="Graph Page Example")
            self.title_label.pack()
            self.pack()
    
        def add_mpl_figure(self, fig):
            self.mpl_canvas = FigureCanvasTkAgg(fig, self)
            self.mpl_canvas.show()
            self.mpl_canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)
    
            self.toolbar = NavigationToolbar2TkAgg(self.mpl_canvas, self)
            self.toolbar.update()
            self.mpl_canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
    
    
    class MPLGraph(Figure):
    
        def __init__(self):
            Figure.__init__(self, figsize=(5, 5), dpi=100)
            self.plot = self.add_subplot(111)
            self.plot.plot([1, 2, 3, 4, 5, 6, 7], [4, 3, 5, 0, 2, 0, 6])
    
    
    fig = MPLGraph()
    
    root = tk.Tk()
    graph_page = GraphPage(root)
    graph_page.add_mpl_figure(fig)
    
    root.mainloop()
    

    【讨论】:

    • 我知道我可以画线和创建图表。但我希望它能够读取 Excel 文件中的更改。因此,如果我更改 Excel 文件 - 或者如果我可以从另一个地方导入一个文件 - gui 端也会改变。我要添加的下一件事是一个过滤器菜单,我可以选择要显示的名称。 (例如:两个人和他们每年跑多少公里的统计数据。)
    • 当然,这不是你上面问的问题,它是:“有什么方法可以调用 MATPLOT 中的所有脚本在 GUI 中运行?就像将视频嵌入到另一个网站一样”
    • 我认为您可能想问一个新的、更具体的问题,它准确地解释了您想要的行为,并描述了您想要的输出。如果您发布 MATPLOT 脚本的代码,您可能会得到更好的响应。
    猜你喜欢
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    相关资源
    最近更新 更多