无法在Tkinter中对齐三个文本小部件

时间:2019-10-02 17:42:16

标签: python tkinter widget

我想在tkinter窗口中创建三个文本区域,并使它们可动态调整大小。我认为一种解决方案是以像素为单位传递width和height参数(例如height = int(win_height / 2)),但据我所知这是不可能的,实际上是在tk中传递width和height参数。窗口小部件是根据每个行和列的字符来计算的。我还尝试过按百分比(例如height = 50%)传递width和height参数,但是它返回了语法错误。

我一直试图在网络上找到解决此问题的方法,而我发现的最佳代码是:

import tkinter as tk

root = tk.Tk()
root.geometry("500x500")

# Text Box
first_textbox = tk.Text(root, width=25, height=10, bg='yellow')
second_textbox = tk.Text(root, width=25, height=10, bg='blue')
third_textbox = tk.Text(root, width=50, height=20, bg='red')

# Packing
first_textbox.grid(column=1, row=1)  
second_textbox.grid(column=1, row=2)
third_textbox.grid(column=2, row=1, rowspan=2)

root.mainloop()

通过运行此代码,我获得了一个窗口,该窗口具有三个无法动态调整大小的文本区域,并且比实际窗口宽度占用更多空间。我希望你能帮助我。 对不起,英语有误,这是我的第二种语言。

1 个答案:

答案 0 :(得分:0)

grid具有多个已记录的参数来帮助您完成所需的操作。您只需要使用它们即可。

默认情况下,grid不会为小部件提供任何额外的空间-它们仅占用所需的空间,而不再占用更多空间。如果您要为小部件分配额外的空间,则必须明确地为此安排。

例如,如果您希望所有小部件均等地增长和缩小,则需要将行和列配置为等于weight且大于零。当窗口大于所有小部件所要求的大小时,这将告诉网格如何分配额外的空间。

例如:

root.grid_rowconfigure((1,2), weight=1)
root.grid_columnconfigure((1,2), weight=1)

这只是告诉grid如何处理多余空间。相反,如果您希望两个或更多行或列具有完全相同的大小,则可以使用uniform选项告诉grid您希望行或列具有统一的(相同)大小

例如,如果希望第1列和第2列都具有相同的宽度,则可以为uniform选项的每列赋予相同的值。注意:传递给uniform的值可以是您想要的任何值。重要的是它们被配置为具有相同的值。

root.grid_columnconfigure((1, 2), uniform="equal")

仅凭这一点并不能解决问题。您还必须告诉grid,您希望小部件填充分配给它们的空间。您可以使用sticky参数来执行此操作,该参数告诉网格将小部件“粘贴”到分配空间的一侧或多侧。

要使小部件填充所有分配的空间,您可以输入字符串"nsew",该字符串代表“北,南,东和西”,代表给定空间的四个侧面。

first_textbox = tk.Text(root, width=25, height=10, bg='yellow')
second_textbox = tk.Text(root, width=25, height=10, bg='blue')
third_textbox = tk.Text(root, width=50, height=20, bg='red')