tkinter 文本小部件的自适应调整大小
Adaptive resizing for a tkinter Text widget
我一直在尝试创建一个包含两个 Text()
小部件的应用程序,这两个小部件都可以在 window 大小更改时动态调整大小。在我一直使用 root.pack()
管理器之前,使用 fill='both'
和 expand=True
。
虽然这适用于 LabelFrame
s 和大多数其他小部件,但当 Text
小部件的大小调整为小于其原始尺寸时,它不起作用。有没有办法动态调整 Text
小部件的大小?
例如
import tkinter as tk
window = tk.Tk()
editor = tk.Text(bg='red')
editor.pack(side='top',fill='both',expand=True)
output = tk.Text(bg='green')
output.pack(side='top',fill='both',expand=True)
window.mainloop()
Tkinter 将尝试满足文本小部件的请求大小。由于您没有指定大小,文本小部件将请求 80x24 的大小。当您将 window 的大小调整得更小时,pack
会尝试按照其请求的大小为所有内容腾出空间,并且它会按堆叠顺序执行此操作。
随着 window 缩小,所有第一个文本小部件都有空间,但两个都不够。因为没有足够的空间,它必须从剩余的小部件中减去 space。因此,它开始砍掉最后一个文本小部件。
为了解决这个问题,您可以将请求的文本小部件的大小设置为适合几乎任何 window 大小的较小值,然后通过设置 window 作为一个整体。这样,pack
会先给每个小的window分配足够的space,等多了space.
再平均扩容
例如:
import tkinter as tk
window = tk.Tk()
window.geometry("400x400")
editor = tk.Text(bg='red', width=1, height=1)
output = tk.Text(bg='green', width=1, height=1)
editor.pack(side='top',fill='both',expand=True)
output.pack(side='top',fill='both',expand=True)
window.mainloop()
另一种解决方案是使用 grid
,它允许您指定行和列的大小应该一致。
import tkinter as tk
window = tk.Tk()
editor = tk.Text(bg='red')
output = tk.Text(bg='green')
editor.grid(row=0, column=0, sticky="nsew")
output.grid(row=1, column=0, sticky="nsew")
window.grid_columnconfigure(0, weight=1)
window.grid_rowconfigure((0,1), weight=1, uniform=1)
window.mainloop()
我一直在尝试创建一个包含两个 Text()
小部件的应用程序,这两个小部件都可以在 window 大小更改时动态调整大小。在我一直使用 root.pack()
管理器之前,使用 fill='both'
和 expand=True
。
虽然这适用于 LabelFrame
s 和大多数其他小部件,但当 Text
小部件的大小调整为小于其原始尺寸时,它不起作用。有没有办法动态调整 Text
小部件的大小?
例如
import tkinter as tk
window = tk.Tk()
editor = tk.Text(bg='red')
editor.pack(side='top',fill='both',expand=True)
output = tk.Text(bg='green')
output.pack(side='top',fill='both',expand=True)
window.mainloop()
Tkinter 将尝试满足文本小部件的请求大小。由于您没有指定大小,文本小部件将请求 80x24 的大小。当您将 window 的大小调整得更小时,pack
会尝试按照其请求的大小为所有内容腾出空间,并且它会按堆叠顺序执行此操作。
随着 window 缩小,所有第一个文本小部件都有空间,但两个都不够。因为没有足够的空间,它必须从剩余的小部件中减去 space。因此,它开始砍掉最后一个文本小部件。
为了解决这个问题,您可以将请求的文本小部件的大小设置为适合几乎任何 window 大小的较小值,然后通过设置 window 作为一个整体。这样,pack
会先给每个小的window分配足够的space,等多了space.
例如:
import tkinter as tk
window = tk.Tk()
window.geometry("400x400")
editor = tk.Text(bg='red', width=1, height=1)
output = tk.Text(bg='green', width=1, height=1)
editor.pack(side='top',fill='both',expand=True)
output.pack(side='top',fill='both',expand=True)
window.mainloop()
另一种解决方案是使用 grid
,它允许您指定行和列的大小应该一致。
import tkinter as tk
window = tk.Tk()
editor = tk.Text(bg='red')
output = tk.Text(bg='green')
editor.grid(row=0, column=0, sticky="nsew")
output.grid(row=1, column=0, sticky="nsew")
window.grid_columnconfigure(0, weight=1)
window.grid_rowconfigure((0,1), weight=1, uniform=1)
window.mainloop()