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

10 python tkinter sticky

我一直在玩tkinter,我无法弄清楚为什么"粘性"属性似乎不适用于我的按钮.我已指定粘贴为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()
Run Code Online (Sandbox Code Playgroud)

Bry*_*ley 8

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

由于您将按钮放在右上方的单元格(第1行,第2列)中,但是您想要它在左上角(整个窗口?),很难确切地知道您想要什么.在不知道你想要实现什么的情况下,很难提出任何建议.

学习网格布局管理器的最简单方法是使用纸和笔.拿出一些网格化的图纸并在纸上画出你的小部件.然后很明显在哪里放置你的小部件.

您还需要了解rowconfigurecolumnconfigure命令,尤其是关于weight属性的命令.使用此属性,您可以识别增长和缩小哪些行和列以占用任何额外空间.知道可以将这些属性应用于空行和列也很有用.如果你希望你的内部小部件保持相同的大小,并且你的gui的边缘有任何额外的应用(通常没用,虽然有时它),这是很有用的.

作为一个粗略的经验法则,每个窗口应该有一个"主要"窗口小部件 - 主导UI的窗口小部件.通常这是一个画布或文本小部件,但它不一定是.找到该窗口小部件并给出行和列,权重为1(一),以便在用户调整窗口大小时增大和缩小.在您的情况下,这将是第2行第1列中的画布.