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

13 投票
2 回答
26747 浏览
提问于 2025-04-16 18:35

我最近在玩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

“粘性”属性是应用在小部件所在的单元格上的,而不是整个网格或整个窗口。所以,虽然小部件是固定在它的单元格的左上角,但因为这个单元格的宽度和按钮完全一样,所以你看不出来。

你把按钮放在右上角的单元格(第一行,第二列),但如果你想把它放在左上角(整个窗口的左上角?),那么就很难知道你到底想要什么。没有了解你想要实现的目标,很难给出建议。

学习网格布局管理器最简单的方法是用纸和铅笔。拿出一些带格子的图纸,把你的控件画在纸上。这样就能清楚地知道应该把控件放在哪里。

你还需要了解 rowconfigurecolumnconfigure 这两个命令,特别是关于 weight 属性的部分。通过这个属性,你可以指定哪些行和列在有额外空间时会扩展或收缩。知道你可以把这些属性应用到空的行和列上也很有用。如果你希望内部的小部件保持相同的大小,而把多余的空间分配到界面的边缘,这样做是有帮助的(通常不太有用,但有时候是)。

大致来说,每个窗口应该有一个“主要”小部件——也就是在用户界面中占主导地位的那个。通常这是一个画布或文本小部件,但不一定要是。找到这个小部件,并给它所在的行和列设置一个权重为1,这样它在用户调整窗口大小时就会跟着一起变大或变小。在你的情况下,这个小部件就是位于第二行,第一列的画布。

撰写回答