Есть много вопросов, похожих на этот, однако я до сих пор не понимаю, как закрепить свои графики на прокручиваемом холсте. Идея состоит в том, что я хочу, чтобы графики появлялись только на прокручиваемом холсте рядом с предыдущим графиком. В этот момент, когда я создаю еще один график, он будет нанесен за пределы холста. Обратите внимание, что я просто установил область прокрутки на случайное большое число. Это на самом деле должно расти с каждым добавленным графом. Однако я не понял, как.
Кто-нибудь знает, что я здесь не так делаю?
import tkinter as tk
import numpy as np
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
class Example:
def __init__(self, master):
self.clicks = 0
self.master = master
self.frame= tk.Frame(master,width=600,height=100,background="green")
self.canv = tk.Canvas(master, width=600, height=400,background="blue",scrollregion=(0,0,2000,2000))
button = tk.Button(master,text='click',command= lambda: self.select(master))
self.scrollY = tk.Scrollbar(master, orient=tk.VERTICAL,
command=self.canv.yview)
self.scrollX = tk.Scrollbar(master, orient=tk.HORIZONTAL,
command=self.canv.xview)
self.canv['xscrollcommand'] = self.scrollX.set
self.canv['yscrollcommand'] = self.scrollY.set
self.frame.grid(row=0,column=0,rowspan=3)
self.scrollY.grid(row=3, column=1, sticky=tk.N+tk.S)
button.grid(row=2,column=0,padx=10,sticky=tk.NW)
self.scrollX.grid(row=4, column=0, sticky=tk.E+tk.W)
self.canv.grid(row=3, column=0)
def select(self,master):
self.clicks +=1
shape = np.random.randint(0,2,[5,5])
lon = np.arange(5)
lat = np.arange(5)
fig = Figure(figsize=(4,4))
ax = fig.add_subplot(111)
c = ax.pcolor(lon,lat,shape)
fig.colorbar(c,ax=ax,fraction=0.046,pad=0.04)
canvas = FigureCanvasTkAgg(fig,self.canv)
canvas.get_tk_widget().grid(row=0,column=self.clicks)
if __name__ == "__main__":
root=tk.Tk()
Example(root)
root.mainloop()