【问题标题】:How to set the button sticky property properly?如何正确设置按钮粘性属性?
【发布时间】:2011-05-30 01:12:41
【问题描述】:

我一直在玩 tkinter,但我不明白为什么“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()

【问题讨论】:

    标签: python tkinter sticky


    【解决方案1】:

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

    由于您将按钮放置在右上方的单元格(第 1 行,第 2 列),但又说您希望它位于左上方(整个窗口的?),因此很难确切知道您想要什么。在不知道您要达到的目标的情况下,很难提出任何建议。

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-30
        • 2014-08-23
        • 2021-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-31
        • 2013-06-16
        相关资源
        最近更新 更多