首页 > 解决方案 > 如何在 Tkinter 窗口中删除不需要的可滚动空间

问题描述

假设一个小的 Tkinter 窗口有两个框架,一个垂直有 20 个按钮,另一个垂直有 100 个按钮。这些框架是一个在另一个之下。窗口很小,所以我创建了一个这样的滚动条:

from tkinter import*

root = Tk()
root.geometry('200x100')

main_frame = Frame(root)
main_frame.pack(fill = BOTH, expand = 1)

main_canvas = Canvas(main_frame, bg = 'snow')
main_canvas.pack(side = LEFT, fill = BOTH, expand = 1)

vertical_scrollbar = ttk.Scrollbar(main_frame, orient = VERTICAL, command = main_canvas.yview)
vertical_scrollbar.pack(side = RIGHT, fill = Y)

main_canvas.configure(yscrollcommand = vertical_scrollbar.set)
main_canvas.bind('<Configure>', lambda e: main_canvas.configure(scrollregion = main_canvas.bbox("all")))

screen_frame = Frame(main_canvas, bg = 'snow')

main_canvas.create_window((0,0), window = screen_frame, anchor = 'nw')

frame1 = Frame(screen_frame, bg = 'snow').grid(row = 0, column = 0)
frame2 = Frame(screen_frame, bg = 'snow').grid(row = 1, column = 1)

for i in range(0, 20):
    Button(frame1, text = 'Button').grid(row = i, column = 0)
    
for j in range(0, 100):
    Button(frame2, text = 'Button').grid(row = j, column = 0)

root.mainloop()

所以此时,我们将能够滚动到第二帧结束。但是现在,如果我执行以下操作:

for widgets in frame2.winfo_children():
    widgets.destroy()

第 2 帧变为空。但是现在滚动条并没有在 frame1 的末尾结束。而是在 frame1 下方有一个空白空间,原来是 frame2 的 100 个按钮。

所以我的疑问是,我们如何删除这个空白空间?

标签: pythontkinter

解决方案


推荐阅读