Окно Tkinter сжимается после встраивания холста Matplotlib — как это предотвратить?Python

Программы на Python
Ответить
Anonymous
 Окно Tkinter сжимается после встраивания холста Matplotlib — как это предотвратить?

Сообщение Anonymous »

Я создаю многокадровое приложение Tkinter для школьного проекта (панель управления NEA). В одном из кадров отображается диаграмма рассеяния Matplotlib с использованием рисункаCanvasTkAgg. Проблема в том, что после переключения на фрейм с графиком все окно сжимается — и все виджеты уменьшаются пропорционально.
Что я пробовал:
  • Блокировка размера окна с помощью .geometry(), .minsize() и .maxsize()
  • Отключение распространения с помощью .pack_propagate(False) во фрейме
  • Установка figsize=(8, 6) и dpi=100 в plt.figure()
  • Использование .config(width=800, height=600) в виджете холста
  • Обертывание холста в рамку-контейнер
  • По возможности избегайте .update()
Несмотря на все это, окно по-прежнему сжимается после 1–2 запусков, и мне часто приходится перезапускать IDE для восстановления. Я также заметил, что приложение ненадолго показывает главный кадр перед переключением на вход в систему, что может способствовать сдвигу макета.
вот соответствующий код:

Код: Выделить всё

import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt
import numpy as np

root = tk.Tk()

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()

root.geometry(f"{screen_width}x{screen_height}")
root.minsize(screen_width, screen_height)
root.maxsize(screen_width, screen_height)

frame = tk.Frame(root, width=screen_width, height=screen_height)
frame.pack_propagate(False)
frame.pack()

x = np.random.randint(100, size=100)
y = np.random.randint(100, size=100)
colors = np.random.randint(100, size=100)
sizes = 10 * np.random.randint(100, size=100)

fig = plt.figure(figsize=(screen_width / 100, screen_height / 100), dpi=100)
ax = fig.add_subplot()
scatter = ax.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='nipy_spectral')
fig.colorbar(scatter)

canvas = FigureCanvasTkAgg(fig, master=frame)
canvas.draw()
canvas_widget = canvas.get_tk_widget()
canvas_widget.config(width=screen_width, height=screen_height)
canvas_widget.pack(fill=tk.NONE, expand=False)

root.mainloop()
это мой первый пост, поэтому я ничего не упустил, lmk, заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/798 ... prevent-it
Ответить

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

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

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

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

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