通过网格在Tkinter中显示Matplotlib导航工具栏

Cod*_*Cat 16 grid tkinter matplotlib

我正在开发一个小的Tkinter GUI来绘制matplotlib图.(它包含几个条目,并根据其内容组装图.)

我根据http://matplotlib.org/examples/user_interfaces/embedding_in_tk.html设计了我的绘图小部件,只使用网格而不是包:

canvas = FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().grid(row=1,column=4,columnspan=3,rowspan=20)
Run Code Online (Sandbox Code Playgroud)

那部分有效.但是以相同的方式嵌入NavigationToolbar却没有.当我包含这些行时,Tkinter会在没有错误的情况下崩溃:

toolbar = NavigationToolbar2TkAgg( canvas, root )
canvas._tkcanvas.grid(row=22,column=4)
Run Code Online (Sandbox Code Playgroud)

我知道这是因为NavigationToolbar调用pack内部,并packgrid合不来.但是,我喜欢网格,并且不愿重新设计我的整个GUI只是为了能够使用NavigationToolbar.

有解决方法,所以我可以通过网格使用NavigationToolbar2TkAgg吗?(我已经找到了意见,"继承和过载" 在这里,但不知道该怎么做.)

任何帮助非常感谢!

Bry*_*ley 14

你能创建一个空框架,然后放入NavigationToolbar那个框架吗?我假设NavigationToolbar遗嘱将自己包装在那个框架中.然后,您可以在框架上使用网格.

  • 我试过了:`toolbar_frame = Frame(root)``toolbar_frame.grid(row = 21,column = 4,columnspan = 2)``toolbar = NavigationToolbar2TkAgg(canvas,toolbar_frame)`那显示导航工具栏,谢谢!但它似乎没有连接到FigureCanvas? (4认同)

LBo*_*oss 6

这是Bryan Oakleys答案中提到的代码示例(将工具栏添加到框架,将框架放置在网格上):

    fig = Figure(figsize=(5, 5), dpi=100)

    canvas = FigureCanvasTkAgg(fig, master=root)
    canvas.get_tk_widget().grid(row=1,column=4,columnspan=3,rowspan=20)
    # here: plot suff to your fig
    canvas.draw()

    ###############    TOOLBAR    ###############
    toolbarFrame = Frame(master=root)
    toolbarFrame.grid(row=22,column=4)
    toolbar = NavigationToolbar2TkAgg(canvas, toolbarFrame)
Run Code Online (Sandbox Code Playgroud)