python - 如何使用 python Tkinter 将 matplotlib 图形嵌入到弹出窗口中

标签 python matplotlib tkinter embed

我有一个 tkinter 程序,当我最初运行它时,它会显示 matplotlib 图形。然而,我在另一个弹出窗口中嵌入第二个 matplotlib 图时遇到了麻烦。

理想情况下,我希望能够单击一个按钮并显示一个包含 matplotlib 的窗口。

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import numpy as np
import Tkinter as Tk

class Window():
    def __init__(self, master):
        self.master = master
        self.frame = Tk.Frame(master)
        self.button1 = Tk.Button(self.master, text = 'Open Graph Window', width = 25,command= self.new_window)
        self.button1.pack()
        self.f = Figure( figsize=(7, 6), dpi=80 )
        self.ax0 = self.f.add_axes( (0.05, .05, .50, .50), axisbg=(.75,.75,.10), frameon=True)
        self.ax0.plot(np.max(np.random.rand(100,10)*10,axis=1),"r-")

        self.frame = Tk.Frame(root)
        self.frame.pack(side=Tk.LEFT, fill=Tk.BOTH, expand=1)

        self.canvas = FigureCanvasTkAgg(self.f, master=self.frame)
        self.canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)
        self.canvas.show()


    def new_window(self):
        self.newWindow = Tk.Toplevel(self.master)
        self.app = Graph(self.newWindow)

class Graph():
    def __init__(self, master):
        self.master = master
        self.frame = Tk.Frame(master)
        self.f1 = Figure( figsize=(10, 9), dpi=80 )
        self.ax10 = self.f1.add_axes( (0.05, .05, .50, .50), axisbg=(.75,.75,.10), frameon=True)
        self.ax10.plot(np.max(np.random.rand(100,10)*10,axis=1),"r-")
        self.quitButton = Tk.Button(self.frame, text = 'Quit', width = 25, command = self.close_windows)
        self.canvas = FigureCanvasTkAgg(self.f1, master=self.master)
        self.canvas.show()
        self.quitButton.pack()
        self.frame.pack()

    def close_windows(self):
        self.master.destroy()

if __name__ == '__main__':
    root = Tk.Tk()
    app = Window(root)
    root.title( "MatplotLib with Tkinter" )
    root.update()
    root.deiconify()
    root.mainloop()

我有我认为应该可以在打开另一个窗口时生成另一个 matplotlib 图形的代码。但这不起作用。 当我单击“打开窗口按钮”时,如何才能显示第二个图表?

任何帮助将不胜感激

最佳答案

您刚刚忘记将 Canvas 打包到 Graph 类中。添加行

self.canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)

Graph__init__方法中,图表应该显示在顶层。

关于python - 如何使用 python Tkinter 将 matplotlib 图形嵌入到弹出窗口中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47297059/

相关文章:

python - 手动实例化一个日志客户端

javascript - 是否可以为我的 sqlite 数据库生成一个随机且唯一的 5 位数 ID?

Python Tkinter 多个命令

python - 使用 tkinter 变量查询 MySQL 数据库

python - 在 tkinter 滚动条中显示文件

python - Django CSRF 框架忽略 session cookie 域

python - 通过返回对象方法对对象列表进行排序

python - 如何在 Python 中设置辅助 y 轴

python - mpld3 的数据安全

python - 自定义 matplotlib 图