Использование TKinter и matplotlib: постройте график на второй вкладке (блокноте), используя информацию из первой вкладкPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Использование TKinter и matplotlib: постройте график на второй вкладке (блокноте), используя информацию из первой вкладк

Сообщение Anonymous »


У меня есть две вкладки в графическом интерфейсе TKinter и класс для каждой вкладки. Я создал функцию для построения графика на второй вкладке, вызываю эту функцию на первой вкладке и передаю переменные, созданные на первой вкладке. Однако вторая вкладка не отображает этот график и остается пустой. Я подтвердил, что график создан правильно, сохранив его в файл, поэтому думаю, проблема в кадрах в Frame2. Если я создаю метку в функции инициализации кадра 2, она отображается, но когда я делаю то же самое в функции плавления_плоттера, ее нет.

Основной класс:

класс TkinterPlotter: def __init__(я, корень): супер().__init__() self.root = корень self.root.title("Анализ управления персоналом") self.root.geometry("1200x600") self.notebook = ttk.Notebook(self.root) self.notebook.grid(row=0, columns=0, Sticky="nsew") self.frame1 = Frame1(self.notebook) self.frame2 = Frame2(self.notebook) self.notebook.add(self.frame1, text='Разностный график') self.notebook.add(self.frame2, text='Кривые плавления') Соответствующий код Frame1:

класс Frame1(ttk.Frame): def __init__(я, корень): супер().__init__() self.Frame2 = Frame2(корневой) # Еще какая-то функция self.Frame2.melting_plotter(self.df_selected, self.normalized_df, self.normalize_temp.get()) Кадр2:
класс Frame2(ttk.Frame): def __init__(я, корень): супер().__init__(корень) # Создайте рамки для хранения графиков self.plot_frame2 = tk.Frame(сам) self.plot_frame2.grid(row=0, columns=0, Sticky="nsew") self.plot_frame3 = tk.Frame(self) self.plot_frame3.grid(строка=0, столбец=1, Sticky="nsew") def Melting_plotter(self, df_selected,normalized_df,normalized_temp): x_limit = float(normalized_temp) # Преобразование нормализации_temp в число с плавающей запятой # Создаем новую фигуру для графика плавления plt.figure(figsize=(8, 4)) # Построение df_selected plt.subplot(1, 2, 1) # Создаём первый подзаголовок для столбца в df_selected.columns[1:]: plt.plot(df_selected['X'], df_selected[столбец], label=f'{столбец} — Выбрано') # Добавляем метки и заголовок для df_selected plt.xlabel('Температура (°C)') plt.xlim(x_limit + 1, 90) plt.ylabel('Флуоресценция') plt.title('Кривые плавления') # Построение графика нормализованного_df plt.subplot(1, 2, 2) # Создаем второй подзаголовок для столбца в файлеnormalized_df.columns[1:]: plt.plot(normalized_df['X'],normalized_df[столбец], label=f'{столбец} — Нормализованный') # Добавляем метки и заголовок дляnormalized_df plt.xlabel('Температура (°C)') plt.xlim(x_limit + 1, 90) plt.ylabel('Нормализованная флуоресценция') plt.title('Нормализованные кривые плавления') # Отрегулируйте макет, чтобы предотвратить перекрытие plt.tight_layout() # Сохраняем график как изображение буф = БайтыIO() plt.savefig(buf, format='png') plt.savefig('sample_plot.png') # Это создает правильный график buf.seek(0) # Конвертируем изображение графика в формат, совместимый с Tkinter plot_image = Image.open(buf) plot_image_tk = ImageTk.PhotoImage(plot_image) self.plot_label = ttk.Label(self.plot_frame2, image=plot_image_tk) self.plot_label.grid(row=0, columns=0, Sticky="nesw") self.plot_label.configure(изображение=plot_image_tk) self.plot_label.image =plot_image_tk plt.close()
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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