Python Tkinter校准

Python Tkinter校准,python,tkinter,Python,Tkinter,我仍在试图弄清楚Tkinter,我不明白为什么这个right变量没有一直显示在右边?我以为这些框架会把窗户垂直分开,不是吗 尝试添加: Grid.rowconfigure(root, 0, weight=1) Grid.columnconfigure(root, 0, weight=1) Grid.columnconfigure(root, 1, weight=1) 就在之前 root.mainloop() 出于某种原因,您也可以单独添加以下内容: Grid.columnconfigure

我仍在试图弄清楚Tkinter,我不明白为什么这个
right
变量没有一直显示在右边?我以为这些框架会把窗户垂直分开,不是吗

尝试添加:

Grid.rowconfigure(root, 0, weight=1)
Grid.columnconfigure(root, 0, weight=1)
Grid.columnconfigure(root, 1, weight=1)
就在之前

root.mainloop()
出于某种原因,您也可以单独添加以下内容:

Grid.columnconfigure(root, 0, weight=1)
我认为您的代码似乎不能按您所希望的那样工作的原因是根窗口拒绝将其宽度缩小得更大。如果您有较长的文本或较大的字体,它将按您的预期工作。

尝试添加:

Grid.rowconfigure(root, 0, weight=1)
Grid.columnconfigure(root, 0, weight=1)
Grid.columnconfigure(root, 1, weight=1)
就在之前

root.mainloop()
出于某种原因,您也可以单独添加以下内容:

Grid.columnconfigure(root, 0, weight=1)

我认为您的代码似乎不能按您所希望的那样工作的原因是根窗口拒绝将其宽度缩小得更大。如果你有更长的文本或更大的字体,它会按照你的预期工作。

Nae的答案是正确的,但当我尝试它时,它并没有完全工作。原因是

frame1 = Frame(root, bg = 'blue').grid(row = 0, column =0,sticky = W)
将名称
frame1
绑定到.grid()的返回值,该值为None。执行此行时:

Label(frame1, text = 'Left').grid(row = 0, column =0,sticky = W)
实际上,您正在使标签成为顶级窗口,因为其父窗口是“无”,而不是框架

这对我很有用(Windows 10上的python3.6):


详细说明columnconfigure的解释:默认情况下,tk会将网格压缩到尽可能小的空间中,即使这不会填满窗口。所以这两个标签最后被挤压到左边。即使第二个设置为sticky=E,布局中也没有额外的空间,因此您看不到sticky设置的效果。您可以通过为一列或多列指定非零权重来覆盖此选项。这告诉tk,通过根据相对列权重分配未使用的空间来扩展网格,直到它填满窗口。

Nae的答案是正确的,但在我尝试时,它没有完全起作用。原因是

frame1 = Frame(root, bg = 'blue').grid(row = 0, column =0,sticky = W)
将名称
frame1
绑定到.grid()的返回值,该值为None。执行此行时:

Label(frame1, text = 'Left').grid(row = 0, column =0,sticky = W)
实际上,您正在使标签成为顶级窗口,因为其父窗口是“无”,而不是框架

这对我很有用(Windows 10上的python3.6):


详细说明columnconfigure的解释:默认情况下,tk会将网格压缩到尽可能小的空间中,即使这不会填满窗口。所以这两个标签最后被挤压到左边。即使第二个设置为sticky=E,布局中也没有额外的空间,因此您看不到sticky设置的效果。您可以通过为一列或多列指定非零权重来覆盖此选项。这会告诉tk通过根据相对列权重分配未使用的空间来扩展网格,直到它填满窗口。

您能画一张图片来显示您试图实现的目标吗?正如所指出的,您的
frame1
frame2
被分配给
,与框架小部件的对象不同,它们都是一个方法的结果,没有返回的
,你能画一幅图来显示你想要实现什么吗?正如你指出的那样,你的
frame1
frame2
被分配给
None
,而不是框架小部件的对象,因为它们都是一个方法的结果,没有
返回
,谢谢!太好了…我试着理解这个专栏的功能,但是我无法点击它。你能有一个好的方法来解释它到底做了什么吗?@user6142489我想它告诉(parent,columnNumber,weight)如果父网格被调整大小,它会告诉网格使用一个权重因子来调整它自己的大小,在你的例子中,root的行比需要的长,但是默认情况下weight=0,所以它不需要调整大小。rowconfigure的工作方式与此类似。谢谢!太好了…我试着理解这个专栏的功能,但是我无法点击它。你能有一个好的方法来解释它到底做了什么吗?@user6142489我想它告诉(parent,columnNumber,weight)如果父网格被调整大小,它会告诉网格使用一个权重因子来调整它自己的大小,在你的例子中,root的行比需要的长,但是默认情况下weight=0,所以它不需要调整大小。rowconfigure的工作原理与此类似。我明白了-谢谢。因此,我应该始终将.grid()从初始帧声明中分离出来。真的很喜欢Tkinter,只是学习曲线太陡了(至少对我来说是这样)。谢谢“实际上,您正在使标签成为顶级窗口”-您的术语在这里有点混乱。你没有把它变成一个窗口,也不是一个“顶层”。代码只是使小部件成为根窗口的子窗口。因此,我应该始终将.grid()从初始帧声明中分离出来。真的很喜欢Tkinter,只是学习曲线太陡了(至少对我来说是这样)。谢谢“实际上,您正在使标签成为顶级窗口”-您的术语在这里有点混乱。你没有把它变成一个窗口,也不是一个“顶层”。代码只是使小部件成为根窗口的子窗口。