我正在编写一个绘制图表的程序。我在画布内嵌入了一个框架,然后在该框架内绘制了图表。根中嵌入了一个按钮。按下按钮,将显示图表。
尽管出现了图表,但它们似乎超出了窗口(请注意我要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()
任何帮助将不胜感激。谢谢。
答案 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()
该代码现在可以使用。