python - 如何在 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 个按钮。
所以我的疑问是,我们如何删除这个空白空间?
解决方案
推荐阅读
- vue.js - Vue axios 跨源错误到常规 Web URL
- javascript - Laravel 7 - JQuery - 提交表单返回空白页 - 不重新路由
- java - 由于半透明背景,androidx.mediarouter.app.MediaRouteButton 抛出 android.view.InflateException
- nginx - 如何使用 nginx 发布两个 odoo 实例,使用不同的路径而不是不同的服务器名称或端口?
- c# - 从字符串中读取命令并在 C# 中执行它们各自函数的最佳方法?
- c++ - Arduino MKR Wifi 1010 与 Arduino Mega 的串行通信
- django - 选择每小时的最新记录
- go - Golang:如何读取嵌套 JSON 对象中的数据?
- javascript - setColor 不是函数
- node.js - Node.js Express Web App 在 localhost 中有效,但在发布到 Azure 时无效