Я пытаюсь настроить рисунок matplotlib.pyplot в соответствии с размером окна при использовании сетки. Моя первая попытка состояла в том, чтобы установить вес с помощью columnconfigure, которое позволяло увеличивать масштаб только до точки, после которой фигура не стала бы больше. Тем не менее, он изменился правильно при уменьшении размера окна.
root.columnconfigure(0, weight=1)
Следующей попыткой было получить размер окна, преобразовать его в пиксели и использовать set_size_inches
self.fig_sig.set_size_inches(x_scaled,y_scaled)
self.fig_sig.canvas.draw()
Однако на самом деле он не меняет размер.
Ниже приведен исполняемый код, который я использовал для тестирования.
import tkinter as tk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
class MyApp(tk.Frame):
def __init__(self, master = None):
self.new_window()
tk.Frame.__init__(self, master)
self.counter = []
def new_window(self):
root.bind("<Configure>", self.resize)
root.columnconfigure(0, weight=1)
root.columnconfigure(1, weight=1)
root.columnconfigure(2, weight=1)
root.rowconfigure(1, weight=1)
self.fig_sig = plt.figure()
graph = self.fig_sig.add_subplot(111)
x_werte = [0,1,2,3,4,5]
y_werte = [0, 2, 4, 6, 8, 10]
graph.plot(x_werte, y_werte)
canvas = FigureCanvasTkAgg(self.fig_sig, master=root)
canvas_widget=canvas.get_tk_widget()
canvas_widget.grid(row = 1, column = 0, columnspan = 3)
canvas.draw()
def resize(self, event):
x_scaled = event.width/96
y_scaled = event.height/96 -2
self.fig_sig.set_size_inches(x_scaled,y_scaled)
self.fig_sig.canvas.draw()
print("resized to", x_scaled, y_scaled)
if __name__=="__main__":
root = tk.Tk()
myapp = MyApp(master = root)
myapp.mainloop()
Хотя это не первый вопрос, касающийся изменения размера с помощью matplotlib, до сих пор я не смог найти ни одного из предложенных способов работы. .
С уважением