如何正确设置按钮的粘性属性?
我最近在玩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()
2 个回答
1
关键是网格单元的大小和按钮完全一样,所以你不会注意到它是在东边还是西边……你可以通过把所有的控件一个个放在下面(都放在第0行,第0到4列)来检查这一点,这样你会发现按钮会出现在西北的位置。希望这能帮到你……
12
“粘性”属性是应用在小部件所在的单元格上的,而不是整个网格或整个窗口。所以,虽然小部件是固定在它的单元格的左上角,但因为这个单元格的宽度和按钮完全一样,所以你看不出来。
你把按钮放在右上角的单元格(第一行,第二列),但如果你想把它放在左上角(整个窗口的左上角?),那么就很难知道你到底想要什么。没有了解你想要实现的目标,很难给出建议。
学习网格布局管理器最简单的方法是用纸和铅笔。拿出一些带格子的图纸,把你的控件画在纸上。这样就能清楚地知道应该把控件放在哪里。
你还需要了解 rowconfigure
和 columnconfigure
这两个命令,特别是关于 weight
属性的部分。通过这个属性,你可以指定哪些行和列在有额外空间时会扩展或收缩。知道你可以把这些属性应用到空的行和列上也很有用。如果你希望内部的小部件保持相同的大小,而把多余的空间分配到界面的边缘,这样做是有帮助的(通常不太有用,但有时候是)。
大致来说,每个窗口应该有一个“主要”小部件——也就是在用户界面中占主导地位的那个。通常这是一个画布或文本小部件,但不一定要是。找到这个小部件,并给它所在的行和列设置一个权重为1,这样它在用户调整窗口大小时就会跟着一起变大或变小。在你的情况下,这个小部件就是位于第二行,第一列的画布。