Медленная прокрутка с несколькими графиками в TkinterPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Медленная прокрутка с несколькими графиками в Tkinter

Сообщение Anonymous »

Основная проблема здесь заключается в том, что при построении слишком большого количества данных (~36 подграфиков) с использованием PictureCanvasTkAgg полоса прокрутки Tkinter работает слишком медленно, когда пользователь прокручивает данные. Есть ли какое-либо решение этой проблемы? Я не хочу, чтобы мой пользователь столкнулся с этим. Спасибо.
Вы можете попробовать этот код здесь:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import tkinter as tk

class App:
def __init__(self, root):
self.root = root
self.root.title("Scrollable Matplotlib Plot with 9 Subplots")

# Create a frame for the canvas and scrollbars
frame = tk.Frame(root)
frame.pack(fill=tk.BOTH, expand=True)

# Create a canvas for the Matplotlib figure
self.canvas = tk.Canvas(frame)
self.canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

# Create vertical scrollbar
self.v_scrollbar = tk.Scrollbar(frame, orient=tk.VERTICAL, command=self.canvas.yview)
self.v_scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

# Create horizontal scrollbar
self.h_scrollbar = tk.Scrollbar(root, orient=tk.HORIZONTAL, command=self.canvas.xview)
self.h_scrollbar.pack(side=tk.BOTTOM, fill=tk.X)

# Configure canvas with scrollbars
self.canvas.configure(yscrollcommand=self.v_scrollbar.set)
self.canvas.configure(xscrollcommand=self.h_scrollbar.set)

# Create a figure and multiple subplots
self.fig, self.axs = plt.subplots(6, 6, figsize=(10, 10)) # 3x3 grid of subplots

# Generate some data for the plots
x = np.linspace(0, 10, 100)
for i, ax in enumerate(self.axs.flat):
ax.plot(x, np.sin(x + i), label=f'Sine Wave {i+1}')
ax.set_title(f'Plot {i+1}')
ax.legend()

# Add the Matplotlib figure to the canvas
self.figure_canvas = FigureCanvasTkAgg(self.fig, master=self.canvas)
self.figure_canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)

# Bind the canvas to scrolling
self.canvas.create_window((0, 0), window=self.figure_canvas.get_tk_widget(), anchor='nw')

# Update the scroll region
self.update_scroll_region()

# Bind the resize event to update scroll region
self.root.bind("", self.on_resize)

def update_scroll_region(self):
"""Update the scroll region based on the canvas content."""
self.canvas.configure(scrollregion=self.canvas.bbox("all"))

def on_resize(self, event):
"""Update the scroll region when the window is resized."""
self.update_scroll_region()

# Create the main window
root = tk.Tk()
app = App(root)
root.mainloop()


Подробнее здесь: https://stackoverflow.com/questions/791 ... in-tkinter
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Медленная прокрутка с несколькими графиками в Tkinter
    Anonymous » » в форуме Python
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Медленная прокрутка с несколькими графиками в Tkinter
    Anonymous » » в форуме Python
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Медленная прокрутка с несколькими графиками в Tkinter
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Как создать заголовок с несколькими графиками с разными цветами на строку в OpenPyxl
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Медленная прокрутка при использовании BaseAdapter и ImageView Helper для загрузки изображений
    Anonymous » » в форуме Android
    0 Ответы
    66 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»