@LayzyTeh

Как заставить Canvas прокручиваться?

по кнопке должен открываться canvas и надо чтобы он прокручивался. Он появляется но не прокручивается.
Если закомментировать строку 21(та которая комментарием в данный момент) выходит ошибка:
AttributeError: 'Main' object has no attribute 'resCanvas'
import tkinter as tk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np
class Main(tk.Frame):
    def __init__(self, root):
        super().__init__(root) #инициализация класса
        self.init_main()
        
    def init_main(self):
        toolbar = tk.Frame(bg='#d0d8e0', bd=2)
        toolbar.place(x=0,y=0,relwidth=1.0,height=30)
        
        self.toolbarForCanvas=tk.Frame(bg='#d7d8e8', bd=2)
        self.toolbarForCanvas.place(x=0,y=31,width=600,height=570)
        

        self.scrollBarGraph=tk.Scrollbar(master=self.toolbarForCanvas,orient=tk.VERTICAL)
        self.scrollBarGraph.place(x=585,y=0,width=15,relheight=1.0)
        
        #self.resCanvas=tk.Canvas(master=self.toolbarForCanvas,yscrollcommand=self.scrollBarGraph.set,scrollregion=(0,0,585,1200))
        self.scrollBarGraph.config(command=self.resCanvas.yview)
        
        toolbarForLabel=tk.Frame(bg='#d7d0e0',bd=2, width=600,height=2000)
        toolbarForLabel.place(x=601,y=31,width=400,height=570)
        
        AM=tk.Label( toolbarForLabel,text='Amplitude:......')
        AM.place(x=0,y=0,width=150,height=30)
        
        FR=tk.Label( toolbarForLabel,text='Frecuency:......')
        FR.place(x=0,y=31,width=150,height=30)
        
        btnOpenDialog = tk.Button(toolbar, text='open', command=self.draw, bg='#d7d8e0', bd=0, compound=tk.TOP)
        btnOpenDialog.place(x=900,y=0,width=50,height=30)
        
        btnSaveDialog = tk.Button(toolbar, text='save', command=self.save, bg='#d7d8e0', bd=0, compound=tk.TOP)
        btnSaveDialog.place(x=0,y=0,width=40,height=30)
        
        self.txtToEntryName=tk.Entry(toolbar,width=20)
        self.txtToEntryName.place(x=45,y=0,width=100,height=30)
        
        self.lablTime=tk.Label(toolbar,text='time:......',padx=60)
        self.lablTime.place(x=150,y=0,width=100,height=30)
        
    def save(self):
        s="EEG.jpg"
        s=self.txtToEntryName.get()
        plt.savefig(s,dpi=300)
        
    def draw(self):
       data=[]
       t=1/2000
       fig=plt.figure()  
       plot=['0H',"1M",'2C1','3C2','4C3','5C4','6C5','7C6','8w1','9w2','10w3','11w4','12w5','13w6','14R','15L']
       for i in range(16):
           data.append([])
           with open(f"/home/biotech/Documents/EEG/gur1/sinh{plot[i]}.txt",'r') as q:
               for w in q.readlines():
                   data[i].append(float(w[:-2]))
           plt.axhline(-0.1-(1.5*i),0,2*t*len(data[i]),color="black")
           Y=np.array(data[i])
           X=np.linspace(0,t*len(Y),len(Y))
           plt.scatter(X,Y-(1.5*i),s=1,color="black")
           self.y=str(t*len(Y))[:5]
       canvas= FigureCanvasTkAgg(fig, master=self.toolbarForCanvas)  # A tk.DrawingArea.
       canvas.draw()
       self.resCanvas=canvas.get_tk_widget()
       self.resCanvas.config(yscrollcommand=self.scrollBarGraph.set,scrollregion=(0,0,585,1200))
       self.resCanvas.place(in_=self.toolbarForCanvas ,x=0,y=0,width=585,height=570)
       self.lablTime.config(text='time:'+self.y)
   

if __name__ == "__main__":
    root = tk.Tk()                     #создание окна
    app = Main(root)                   #объект класса
    app.place()                        #размещение класса в окне
    root.title("EEG ver.gragh.1.1")      #название
    root.geometry("1000x600")          #размер
    root.resizable(False, False)       #запрет на изменение размера
    root.mainloop()                    #вызов окна

открытие canvas прописано в функции draw
  • Вопрос задан
  • 148 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект