Полосы прокрутки, похоже, не работают, и как я могу удалить встроенный график с помощью кнопки с помощью Tkinter

#python #matplotlib #tkinter #canvas #scrollbar

Вопрос:

Я пытаюсь создать свое первое приложение, но у меня возникли некоторые проблемы. Сначала созданные мной полосы прокрутки, похоже, не работают, и как только я использую кнопку «показать», которая просто должна отображать некоторые точки, вертикальная полоса прокрутки появляется в «середине» кадра, а не на краю, как я хочу, более того, когда я пытался ее использовать, ничего не произошло. Кроме того, исчезает горизонтальная полоса прокрутки.

Помимо полос прокрутки, я хотел бы знать, как удалить созданный мной сюжет, потому что каждый раз, когда я использую «показать», сюжет появляется не в том же месте, что и первый сюжет, а под ним.

 class MyApp(tk.Tk):
    def __init__(self, *args,**kwargs):
        tk.Tk.__init__(self,*args,**kwargs)
        tk.Tk.title(self, 'APP')
    
        container = tk.Frame(self)
        
        container.grid(column=0,row=0,sticky='nswe')
        
        container.grid_rowconfigure(0,weight=1)
        container.grid_columnconfigure(0, weight=1)
        
        self.frames = {}
        
        for F in (Page1,Page2):
            frame = F(container,self)
            self.frames[F] = frame
            frame.grid(row=0,column=0,sticky='nsew')
        
        self.show_frame(Page1)
    
    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

class Page1(tk.Frame):
    def __init__(self,parent,controller):
        tk.Frame.__init__(self, parent)
        self.canvas = tk.Canvas(self,width=500,height=500,
                                scrollregion=(0,0,500,800))
        
        #Creating scrollbars
        self.xscrollbar = tk.Scrollbar(self, orient=tk.HORIZONTAL)
        self.xscrollbar.pack(side=tk.BOTTOM,fill=tk.X)
        self.xscrollbar.config(command=self.canvas.xview)
        
        self.yscrollbar = tk.Scrollbar(self, orient=tk.VERTICAL)
        self.yscrollbar.pack(side=tk.RIGHT,fill=tk.Y)
        self.yscrollbar.config(command=self.canvas.yview)
        
        self.canvas.config(width=500,height=500)
        
        self.canvas.config(xscrollcommand=self.xscrollbar.set,
                           yscrollcommand=self.yscrollbar.set)
        
        self.canvas.pack(fill=tk.BOTH,expand=True)
        
        label = tk.Label(self, text='Page1')
        label.pack()

        def showplot():
            fig = Figure(figsize=(10,5),dpi=100)
            a = fig.add_subplot(111)
            x = [1,2,3,4,5,6,7,8,9,10]
            y = [1.2,2,4.6,3,6,7,10,12,12.6,17]
            a.plot(x,y)
            
            canvas = FigureCanvasTkAgg(fig, self)
            canvas.draw()

            toolbar = NavigationToolbar2Tk(canvas, self)
            toolbar.update()
            canvas.get_tk_widget().pack(side=tk.TOP,fill=tk.BOTH,expand=True)
            canvas._tkcanvas.pack(side=tk.TOP,fill=tk.BOTH,expand=True)
            
        def clean():
            canvas.get_tk_widget().destroy()
            
        button1 = ttk.Button(self, text='Go to Page2',
                           command=lambda: controller.show_frame(Page2))
        button1.pack()
        
        button2 = ttk.Button(self,text='Show', command = showplot)
        button2.pack()
        
        button3 = ttk.Button(self, text='Clean', command=clean)
        button3.pack(side=tk.RIGHT, expand=True)

class Page2(tk.Frame):

    def __init__(self,parent,controller):
        tk.Frame.__init__(self, parent)
    
        self.canvas = tk.Canvas(self,width=500,height=500,scrollregion=(0,0,500,800))
    
    
        #Creating scrollbars
        self.xscrollbar = tk.Scrollbar(self, orient=tk.HORIZONTAL)
        self.xscrollbar.pack(side=tk.BOTTOM,fill=tk.X)
        self.xscrollbar.config(command=self.canvas.xview)
    
        self.yscrollbar = tk.Scrollbar(self, orient=tk.VERTICAL)
        self.yscrollbar.pack(side=tk.RIGHT,fill=tk.Y)
        self.yscrollbar.config(command=self.canvas.yview)
    
        self.canvas.config(width=500,height=500)
    
        self.canvas.config(xscrollcommand=self.xscrollbar.set,
                       yscrollcommand=self.yscrollbar.set)
    
        self.canvas.pack(fill=tk.BOTH,expand=True)

app = MyApp()
app.mainloop()
 

Изображение