Подзаголовок Matplotlib из базы данных SQLite очень медленный

#sqlite #matplotlib #user-interface #tkinter #subplot

Вопрос:

Я работаю над графическим интерфейсом, который выбирает данные из базы данных SQLite и строит их в сетке 3×3 с помощью Tkinter. Чем больше вложенных диаграмм я добавляю, тем медленнее он становится каждый раз, когда я пытаюсь его выполнить. Ниже приведен фрагмент для одного подзаголовка в моем коде.

Сетка подстрок изменяется в зависимости от того, какие из переключателей выбирает пользователь, следовательно, строка «если(option.get()==1)». Я, по сути, повторяю все из строки «CC.выполнить» для каждого отдельного подзаголовка. Есть ли что-то, что я мог бы сделать, чтобы ускорить это, чтобы не требовалось 3-4 секунды для построения одной сетки 3×3?

 def display():
     if(option.get()==1):      
         frame1 = tk.Frame(root, width=675, height=400) 
         frame1.grid(column=1, row=7, rowspan=16, columnspan=2)

         ## Plot # 1
         CC.execute('SELECT * FROM Table1')#
         x1=[]
         y1=[]

         for row in CC.fetchall(): 
             x1.append(row[0])#
             y1.append(row[1])#
         figure1 = plt.Figure(figsize=(13.5,9), dpi=50)
         ax1 = figure1.add_subplot(331)
         line1 = FigureCanvasTkAgg(figure1, frame1)
         line1.get_tk_widget().grid(column=1, row=6, rowspan=6, columnspan=3)             
         ax1.plot(x1,y1)

         ax1.set_xlabel('Xaxis n [Number]')
         ax1.set_ylabel('Yaxis')
         ax1.set_title('Y vs. X')

         figure1.tight_layout(pad=1, w_pad=1)
 

Комментарии:

1. Попробуйте добавить print инструкции и проверить, что занимает больше всего времени.

2. Судя по всему, вы создаете новую tk.Frame каждый раз, когда выполняете display функцию. Это определенно будет происходить медленнее, когда у вас будет какое-то количество Frames сложенных участков.

3. Спасибо вам за ваши предложения! @HenryYik Я разрешаю пользователю переключаться между различными кадрами с помощью переключателей, чтобы выбрать, какую группу графиков они хотят просмотреть. Есть ли более простой способ сделать это так, чтобы кадры не складывались обязательно, как вы упомянули?

4. Самый простой способ-уничтожить предыдущий кадр, прежде чем создавать новый. Вам придется отслеживать созданные вами кадры. Лучший способ-повторно использовать ту же область построения, но это потребует больших изменений в вашем коде.