首页 > 解决方案 > 如何保持 matplotlib 图形大于 tkinter 画布?

问题描述

一天中的好时光。

我正在制作一个与 matplotlib 一起使用的 Python tkinter GUI。问题是,我的图表相当大,所以我希望它可以在较小的画布上滚动。但是,由于某种原因,图形要么缩小到画布的大小,要么画布与图形的大小相匹配,这取决于我的尝试,但我找不到解决这个问题的方法。这是一个代码片段:

import tkinter as tk
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg,NavigationToolbar2Tk

window=tk.Tk()
graphs=Figure(figsize=(6,12))
  ## The graphs I show here are random, I apologize if there are any mistakes
x=[1,2,3]; y=[1,4,9]
gr1 = graphs.add_subplot(311); rects = gr1.bar(x, y)
gr1.set_title('Title 1')
gr2= graphs.add_subplot(312); rects = gr2.bar(x,y)
gr2.set_title('Title 2')
gr3= graphs.add_subplot(313); rects = gr3.bar(x, y)
gr3.set_title('Title 3')

graphs.tight_layout()

frame3=tk.Frame(master=window)
tool=tk.Frame(master=window)
canv=tk.Frame(master=window,height=288)
canvas = FigureCanvasTkAgg(graphs, master=canv)
canvas.draw()
vbar=tk.Scrollbar(master=canv, orient = 'vertical'); vbar.pack(side='right',fill='y')
vbar["command"] = canvas.get_tk_widget().yview
canvas.get_tk_widget().config(yscrollcommand=vbar.set,scrollregion=(0,0,432,864))
canvas.get_tk_widget().update()
canvas.get_tk_widget().pack(fill='x')
    
toolbar = NavigationToolbar2Tk(canvas, tool)
toolbar.update(); toolbar.pack()

canv.grid(row=0,sticky='NESW')
tool.grid(row=1)
frame3.grid(row=2)
window.mainloop()

我尝试将高度设置为canvas.get_tk_widget().config并添加/删除canvas.draw()or canvas.get_tk_widget().update(),但似乎没有任何效果。在这一点上,我变得非常绝望。我已经阅读了一些关于 的资源canvas.configure(scrollregion = canvas.bbox("all")),但它似乎拒绝使用 get_tk_widgets。如果有任何帮助,我将不胜感激。

标签: pythonmatplotlibtkinterscrollbar

解决方案


推荐阅读