Основная проблема здесь заключается в том, что при построении слишком большого количества данных (~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
Медленная прокрутка с несколькими графиками в Tkinter ⇐ Python
Программы на Python
-
Anonymous
1730810799
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()
Подробнее здесь: [url]https://stackoverflow.com/questions/79152014/slowly-scrollable-with-multiple-plots-in-tkinter[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия