matplotlib:如何在可滚动窗口中使用Figurecanvastkagg适当增加子图的数量

时间:2018-12-27 13:13:22

标签: matplotlib tkinter tkinter-canvas

我正在尝试创建一个用户界面,该界面为同事显示一些带有滚动条的图形,而我陷入了代码的最后一部分。

逻辑:

使用主窗口,他们能够添加要运行的文件。当他们运行代码时,图将显示在主窗口下的不同框架中。

大约,他们每次运行使用20-30个文件,它显示大约20-30个图形。

我以有点混乱的方式创建了所有内容,但是它正在运行。但是,当子图的数量很高(> 10)时,图看起来像挤压在屏幕顶部,而底部几乎看上去是空的。我已经尝试了数周,但即使我看到了与我类似的问题,也想再次询问,却找不到很好的解决方案。

因此,在这种情况下如何避免出现密谋。

注意:我在“ FigureCanvasTkAgg” 中使用了 resize_callback ,它以某种方式解决了我的问题,但是我不能使用 NavigationToolbar2Tk 在我的窗口中正常运行。

国王的问候,

这是我的代码:

def gui():
...
...

def func():
    fig, axs=plt.subplots(nrows=len(files),ncols=1,figsize=(20,10*len(fsa_file)), dpi=100, squeeze=False)
    fig.subplots_adjust(hspace=0.5)
    axs=axs.ravel()
    w,h=fig.get_size_inches()



    for v in range(files):

        ...(other things)
        ...
        ...


        axs[v].plot(cb_blue, color="blue")
        axs[v].plot(cb_green, color="green")
        axs[v].plot(cb_black, color="black")
        axs[v].plot(cb_red, color="red")
        axs[v].set_title(files[v].split("/")[6].split(".")[0])


    frame_Agg =Frame(root, width=(20* (fig.dpi)), height=(h * (fig.dpi)))
    canvas=Canvas(frame_Agg,width=(20* (fig.dpi)), height=(h * (fig.dpi)))

    yScrollbar = Scrollbar(root, orient=VERTICAL)
    yScrollbar.pack(side=RIGHT, fill=Y)

    figAgg = FigureCanvasTkAgg(fig,canvas)

    figAgg.get_tk_widget().config(width=(20* (fig.dpi)), height=(h (fig.dpi)))
    figAgg.get_tk_widget().config(yscrollcommand=yScrollbar.set)
    figAgg.get_tk_widget().config(scrollregion=(0,0, 20 * fig.dpi, h * fig.dpi))
    yScrollbar.config(command=figAgg.get_tk_widget().yview)
    figAgg.get_tk_widget().pack(side=tkinter.TOP,fill=tkinter.BOTH,expand=1)

    toolbar = NavigationToolbar2Tk(figAgg, frame_Agg)
    toolbar.update()

    figAgg.draw()
    frame_Agg.pack()
    canvas.pack()

return func

def main():
    gui()
main()

1 个答案:

答案 0 :(得分:0)

我通过使用grid()参数解决了自己的问题。