画布滚动条出现但不起作用

时间:2019-12-18 08:53:25

标签: python-3.x tkinter

我正在编写一个绘制图表的程序。我在画布内嵌入了一个框架,然后在该框架内绘制了图表。根中嵌入了一个按钮。按下按钮,将显示图表。

尽管出现了图表,但它们似乎超出了窗口(请注意我要5张图表,但是此代码在我的计算机上只产生3张)。因此,我尝试了各种添加水平滚动条的方法,但无济于事。滚动条出现,但无法正常工作。

一些解决方案建议我不打包框架,而使用canavas.create_window并将框架作为窗口传递。但是,当我删除frame.pack()行时,程序崩溃了。该程序仅在我添加frame.pack()

时有效

下面是我的代码

from tkinter import *
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure

def on_configure(event=None):
    canvas.configure(scrollregion=canvas.bbox("all"))

def drawGraph(frame):

    for i in range(5):
        f = Figure(figsize=(5,5), dpi=100)
        a = f.add_subplot(111)
        a.plot([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[5,6,1,3,8,9,3,5,9,7,6,5,7,3,2,9,3,5])

        canvas = FigureCanvasTkAgg(f, frame)
        canvas.draw()
        canvas.get_tk_widget().pack(side=LEFT, fill=BOTH, expand=True)

root=Tk()
canvas=Canvas(root)
frame=Frame(canvas)

xscrollbar=Scrollbar(canvas, orient=HORIZONTAL)
xscrollbar.config(command=canvas.xview)

button=Button(root, text='Go',command= lambda: drawGraph(frame))
button.pack()

canvas.create_window((0,0),window=frame)
canvas.config(xscrollcommand=xscrollbar.set)

xscrollbar.pack(side=BOTTOM, fill=X)
canvas.bind("<Configure>", on_configure)
frame.pack()
canvas.pack()
root.mainloop()

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

我发现我在做错误。我没有在create_window中设置锚点。因此答案如下(将其添加到canvas.pack()之后):

canvas.create_window((0,0), window=frame, anchor='nw') #or any other suitable anchor 

还添加:

canvas.configure(scrollregion=canvas.bbox("all"))

还删除以下行:

frame.pack()

该代码现在可以使用。