滚动条如何填充到canvas的高度? (基于网格)

How can the scrollbar be filled to the height of canvas? (grid based)

我把滚动条放在了第二个window。但是滚动条没有canvas的高度,很小。而且只有按钮有效。我如何使它成为canvas的高度?

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



def on_window1():

    top = tk.Toplevel()
    top.wm_geometry("794x470")
    top.title('Optimized Map 1')


    frame = tk.Frame(top)
    frame.grid(row=3, column=0)

    canvas1 = tk.Canvas(top, width=400, height=280)
    canvas1.grid(row=0,column=200)

    for i in range(40):
        l3 = tk.Label(canvas1, text="Number of Rectangles:" + str(i))
        canvas1.create_window(50,21*i, window=l3, anchor=tk.NW)

    myscrollbar= tk.Scrollbar(top,orient="vertical",command=canvas1.yview)
    myscrollbar.grid(row=0,column=200)


    #l4 = tk.Label(canvas1, text="Number of Rectangles:")
    #canvas1.create_window(50,21, window=l4, anchor=tk.NW)

window = tk.Tk()


b1 = tk.Button(window, text="Next", command=on_window1)
b1.grid(row=0, column=0)

window.mainloop()

这是因为 grid 几何管理器不会自动扩展小部件以占用它们可用的所有 window space。

您可以使用 sticky 属性告诉小部件它应该粘附在 "cell" 的哪些边缘:

myscrollbar.grid(row=0,column=200, sticky="NS")

添加以上行代替您的 grid 调用将解决此问题。


作为参考,"cell" 的四个边均以四个基本方向(北、东、南和西)命名,其中 N 代表顶边,E 代表右边,S 代表底边边缘和 W 左边缘。

您可以在属性声明中将它们组合在一起,方法是将所有四个以任意顺序添加为一个字符串。