我一直在玩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()
答案 0 :(得分:8)
sticky属性适用于窗口小部件所在的单元格,而不是整个网格或整个窗口。因此,小部件 锚定到其单元格的nw角落,只是因为单元格与按钮的宽度完全相同而无法分辨。
由于你将按钮放在右上方的单元格(第1行,第2列)中,但是你想要它在左上角(整个窗口?),很难确切地知道你想要什么。在不知道你想要实现什么的情况下,很难提出任何建议。
学习网格布局管理器的最简单方法是使用纸和笔。拿出一些网格化的图纸并在纸上画出你的小部件。然后很明显在哪里放置你的小部件。
您还需要了解rowconfigure
和columnconfigure
命令,尤其是weight
属性。使用此属性,您可以识别增长和缩小哪些行和列以占用任何额外空间。知道可以将这些属性应用于空行和列也很有用。如果你希望你的内部小部件保持相同的大小,并且你的gui的边缘有任何额外的应用(通常没用,虽然有时它),这是很有用的。
作为一个粗略的经验法则,每个窗口应该有一个“主要”窗口小部件 - 主导UI的窗口小部件。通常这是一个画布或文本小部件,但它不一定是。找到该窗口小部件并给出行和列,权重为1(一),以便在用户调整窗口大小时增大和缩小。在您的情况下,这将是第2行第1列中的画布。
答案 1 :(得分:1)
关键是网格单元格与按钮的大小完全相同 - 您不会注意到它是否在E或W中...您可以通过将所有小部件放在彼此之下来检查(所有第0行,和列0-4)你会看到在那种情况下按钮显示NW。希望这会有所帮助...