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)
我创建了一个需要使用 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)