前提・実現したいこと
tkのFrameの中に、matplotlibのFigureCanvasTkAggを継承し、スクロールできるようにしたCanvasを配置しました。
このCanvasの中にCanvasの大きさに合わせたグラフをプロットしたいです。
発生している問題・エラーメッセージ
Canvasの大きさに拡大してグラフをプロットしたいのですが、
Frameの大きさに合わせて描画されてしまいます。
該当のソースコード
Python
1from matplotlib import pyplot as plt 2from matplotlib import ticker 3import os 4import tkinter as tk 5from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk) 6from matplotlib.figure import Figure 7import numpy as np 8import pandas as pd 9 10class MainWindow: 11 def __init__(self): 12 self.root = tk.Tk() 13 14 default_win_size = '800x600' 15 self.root.geometry(default_win_size) 16 17 left_frame_prop = dict(bd=5, relief='groove', bg='white') 18 self.left_frame = tk.Frame(self.root, left_frame_prop) 19 self.left_frame.place(relheight=1.0, relwidth=0.8) 20 21 self.fig = plt.figure() 22 23 self.canvas = ScrollCanvas(self.fig, self.left_frame, 1000, 1000) 24 self.canvas.get_tk_widget().pack(expand=1, fill=tk.BOTH) 25 26 self.fig.set_facecolor('red') 27 28 for n in range(9): 29 self.fig.add_subplot(3, 3, n + 1) 30 31 for n, ax in zip(range(9), self.fig.get_axes()): 32 ax.plot([0.0, 1.0], [1.0, 0.0]) 33 34 self.canvas.get_tk_widget().config(height=1000, width=1000) 35 h = int(self.canvas.get_tk_widget().config()['height'][4]) 36 w = int(self.canvas.get_tk_widget().config()['width'][4]) 37 self.canvas.get_tk_widget().create_rectangle(0, 0, w, h, fill='green') 38 #self.fig.set_size_inches(100, 100) 39 self.fig.canvas.draw() 40 41 tk.mainloop() 42 43class ScrollCanvas(FigureCanvasTkAgg): 44 def __init__(self, fig, master, scroll_width, scroll_height): 45 super().__init__(fig, master=master) 46 47 bar_y = tk.Scrollbar(self.get_tk_widget(), orient=tk.VERTICAL) 48 bar_x = tk.Scrollbar(self.get_tk_widget(), orient=tk.HORIZONTAL) 49 50 bar_y.pack(side=tk.RIGHT, fill=tk.Y) 51 bar_x.pack(side=tk.BOTTOM, fill=tk.X) 52 53 bar_y.config(command=self.get_tk_widget().yview) 54 bar_x.config(command=self.get_tk_widget().xview) 55 56 self.get_tk_widget().config(yscrollcommand=bar_y.set, xscrollcommand=bar_x.set) 57 self.get_tk_widget().config(scrollregion=(0, 0, scroll_width, scroll_height)) 58 59def main(): 60 mainwin = MainWindow() 61 62 63if __name__ == '__main__': 64 main()
試したこと
Canvasの大きさを変える
>緑の部分しか変わらなかった
self.fig.set_size_inches(100, 100)
>変化なし
補足情報(FW/ツールのバージョンなど)
あなたの回答
tips
プレビュー