Python 如何正确设置按钮粘性属性?

Python 如何正确设置按钮粘性属性?,python,tkinter,sticky,Python,Tkinter,Sticky,我一直在玩tkinter,我不明白为什么“sticky”属性似乎不适用于我的按钮。我已经将sticky指定为NW,这会导致我的按钮粘在左上角,但由于某种原因,它会粘在右上角。知道为什么吗 from tkinter import * from tkinter import ttk def test(): name = userName.get() text = "Hello {0}! Pleased to meet you.".format(name) greeting.

我一直在玩tkinter,我不明白为什么“sticky”属性似乎不适用于我的按钮。我已经将sticky指定为NW,这会导致我的按钮粘在左上角,但由于某种原因,它会粘在右上角。知道为什么吗

from tkinter import *
from tkinter import ttk

def test():
    name = userName.get()
    text = "Hello {0}! Pleased to meet you.".format(name)
    greeting.set(text)

window = Tk()

greeting = StringVar()
userName = StringVar()

name = Entry(window, textvariable=userName)
name.grid(column=1, row=1, sticky=NW)

button = Button(window, text="greeting", command=test)
button.grid(column=2, row=1, sticky=NW)

label = Label(window, textvariable=greeting)
label.grid(column=1, row=2, sticky=NW)

#creating a rectangle
canvas = Canvas(window)
canvas.grid(column=1, row=2)
#attributes are x,y coordinates of two points
x = canvas.create_rectangle(5,5,115,115)    

mainloop()

关键是网格单元的大小与按钮的大小完全相同-您不会注意到它是E还是W…您可以通过将所有小部件放置在彼此下方(所有第0行和第0-4列)来检查,在这种情况下,按钮显示为NW。希望这有帮助……

粘性属性适用于小部件所在的单元格,而不是整个网格或整个窗口。因此,小部件被锚定在其单元格的nw角,这只是因为您无法分辨,因为单元格的宽度与按钮的宽度完全相同

由于您将按钮放置在右上角单元格(第1行,第2列)中,但说您希望它位于左上角(整个窗口?),因此很难确切地知道您想要什么。如果不知道你想要实现什么,就很难提出任何建议

学习网格布局管理器最简单的方法是用纸和铅笔。拿出一些网格图形纸,在纸上画你的小部件。然后,很明显,你的小部件应该放在哪里

您还需要了解
rowconfigure
columnconfigure
命令,特别是关于
weight
属性。使用此属性,您可以确定哪些行和列增长和收缩以占用任何额外空间。知道可以将这些属性应用于空行和空列也很有用。如果您希望内部小部件保持相同的大小,并且在gui的边缘应用了任何额外的小部件,那么这将非常有用(通常不有用,尽管有时是)

作为一个粗略的经验法则,每个窗口都应该有一个“主要”的小部件——控制UI的小部件。通常这是一个画布或文本小部件,但不一定是。找到该小部件,并将其所在的行和列的权重设置为1(一),以便它随着用户调整窗口大小而增长和收缩。在您的案例中,这将是第2行第1列中的画布