防止滚动文本占用整个父级 window 禁止显示其他小部件

Prevent scrolledtext from taking up entire parent window disallowing other widgets from showing up

所以我实际上是在编写一个简单的 GUI 程序,它使用 tkinter.scrolledtext 模块中的 ScrolledText 小部件。

问题是这个 ScrolledText 小部件似乎占用了父 window 中可用的完整 space。它不允许我在同一个父 window 中放入任何其他小部件。我尝试同时使用网格和包 GeoManagers(我知道 place 在所有情况下都不是很有用),但其他小部件不会显示(既不在滚动文本小部件上方也不在其下方)。

这是代码--

import tkinter as tk
import tkinter.scrolledtext as sct

win2 = tk.Tk()
win2.geometry('1150x680')
win2.wm_geometry('+80+20')

txtbox = sct.ScrolledText(win2, width=500, height=350, bg='#fff', fg='#00f')
txtbox.grid(row=0, column=0)
txt = '<ABOUT 60 Lines TEXT HERE>'

txtbox.insert(1.0, txt)
txtbox.configure(state=tk.DISABLED)

tk.Button(win2, text='Got It', command=win2.destroy).grid(row=1, column=0)

这段代码实际上是静态方法的一部分(我认为这没什么区别)。当这是 运行 时,屏幕上唯一可见的是带有 60 行的滚动文本小部件(我也尝试过 2 行 - 仍然不起作用)。 使用 pack() 时也会发生同样的情况。

令我惊讶的是,我在文档中唯一能找到的是这个::

ScrolledText Documentation

我不知道我在这里遗漏了什么所以请建议我解决这个问题的方法。 谢谢你:)

网格解决方案

问题在于网格的配置:默认情况下,网格单元会展开以适合内容。在您的情况下,文本小部件太大,以至于下面一行中的按钮超出了屏幕。要解决这个问题,您需要配置第一行和第一列以使用 GUI 拉伸:

win2.rowconfigure(0, weight=1)
win2.columnconfigure(0, weight=1)

并使文本小部件填充单元格,使用 sticky 选项:

txtbox.grid(row=0, column=0, sticky='ewns')

这样文本小部件将适应 window 大小,而不是相反。

完整代码:

import tkinter as tk
import tkinter.scrolledtext as sct

win2 = tk.Tk()
win2.geometry('1150x680')
win2.wm_geometry('+80+20')
win2.rowconfigure(0, weight=1)
win2.columnconfigure(0, weight=1)
txtbox = sct.ScrolledText(win2, width=500, height=350, bg='#fff', fg='#00f')
txtbox.grid(row=0, column=0, sticky='ewns')
txt = '<ABOUT 60 Lines TEXT HERE>'

txtbox.insert(1.0, txt)
txtbox.configure(state=tk.DISABLED)

tk.Button(win2, text='Got It', command=win2.destroy).grid(row=1, column=0)

替代方法,使用包

您可以使用带有选项 fill='both'expand=True 的 pack 来获得与 grid 相同的结果。在这种情况下,额外的技巧是首先打包按钮以确保它有足够的 space 显示在 window 中。代码:

import tkinter as tk
import tkinter.scrolledtext as sct

win2 = tk.Tk()
win2.geometry('1150x680')
win2.wm_geometry('+80+20')

tk.Button(win2, text='Got It', command=win2.destroy).pack(side='bottom')
txtbox = sct.ScrolledText(win2, width=500, height=350, bg='#fff', fg='#00f')
txtbox.pack(fill='both', expand=True)
txt = '<ABOUT 60 Lines TEXT HERE>'

txtbox.insert(1.0, txt)
txtbox.configure(state=tk.DISABLED)