[英]How to embed matplotlib graph into popup window using python Tkinter
我有一個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圖。 然而,這不起作用。 當我點擊“打開窗口按鈕”時,我該怎么做才能顯示第二個圖表?
任何幫助將不勝感激
您剛忘記在Graph
類中打包畫布。 添加行
self.canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)
在__init__
的方法Graph
,曲線圖應在頂層顯示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.