#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. Попробуйте добавить
2. Судя по всему, вы создаете новую
tk.Frame
каждый раз, когда выполняетеdisplay
функцию. Это определенно будет происходить медленнее, когда у вас будет какое-то количествоFrames
сложенных участков.3. Спасибо вам за ваши предложения! @HenryYik Я разрешаю пользователю переключаться между различными кадрами с помощью переключателей, чтобы выбрать, какую группу графиков они хотят просмотреть. Есть ли более простой способ сделать это так, чтобы кадры не складывались обязательно, как вы упомянули?
4. Самый простой способ-уничтожить предыдущий кадр, прежде чем создавать новый. Вам придется отслеживать созданные вами кадры. Лучший способ-повторно использовать ту же область построения, но это потребует больших изменений в вашем коде.