Tkinter window 无需触摸即可调整大小以适应内容

Tkinter window resize to fit content without touching

我创建了一个需要使用 place() 管理器的应用程序。我尝试使用 pack()grid(),但经过多次尝试和大量努力后,它并没有实现我的目标。因为我几乎一直使用 relx=rely=,并且我想将我的应用程序放在多个 OS 上,所以我需要调整 window 大小以适应所有小部件没有他们接触。

有办法吗?由于许多 OS 及其更新会改变呈现小部件的大小,因此我不希望用户必须一直调整 window 的大小。我希望它尽可能紧密地贴合或获得最小宽度和高度,以便我可以添加一些缓冲区。这可能吗?如果没有,是否有一种无需重写所有内容即可修复我的应用程序的方法?

注:

我发现了类似的东西:,但我无法正常使用它。

我明白了。您可以使用 widget.winfo_height()/widget.winfo_width() 函数来获取最小像素大小。由于 window.geometry() 函数需要像素大小,因此您可以创建两个列表:一个用于宽度,一个用于高度。通过添加最少数量的小部件,您可以获得所需的大小。

代码:

height_widget_list = [main_label, main_notebook, the_terminal, quit_button, settings_button]
width_height_list = [commands_label, main_notebook, quit_button]
widget_list = [main_label, main_notebook, the_terminal, quit_button, settings_button, commands_label]
# Widgets must be updated for height and width to be taken
for widget in widget_list:
    widget.update()
height_required_list = []
width_required_list = []
# Collects data
for widget in height_widget_list:
    height_required_list.append(int(widget.winfo_height()))
for widget in width_height_list:
    width_required_list.append(int(widget.winfo_width()))
# Get height requirement
minimum_height = 0
for height in height_required_list:
    minimum_height += height
# Get width requirement
minimum_width = 0
for width in width_required_list:
    minimum_width += width
# Make window correct size make window require the correct sizing
window.geometry("{}x{}".format(minimum_width, minimum_height))
window.resizable(False, False)