Как правильно установить свойство кнопки sticky? - PullRequest
10 голосов
/ 30 мая 2011

Я немного поигрался с 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 ]

8 голосов
/ 30 мая 2011

Атрибут sticky применяется к ячейке, в которой находится виджет, а не ко всей сетке или всему окну.Итак, виджет привязан к nw-углу его ячейки, просто вы не можете сказать, потому что ячейка точно такой же ширины, как кнопка.

Поскольку вы размещаетекнопка в верхней правой ячейке (строка 1, столбец 2), но вы говорите, что хотите ее в левом верхнем углу (всего окна?), трудно точно знать, что вы хотите.Не зная, чего вы пытаетесь достичь, трудно дать какие-либо рекомендации.

Самый простой способ освоить менеджер компоновки сетки - это бумага и карандаш.Возьмите графическую бумагу с сеткой и нарисуйте на ней свои виджеты.Тогда становится очевидным, куда поместить ваши виджеты.

Вам также необходимо узнать о командах rowconfigure и columnconfigure, особенно в отношении атрибута weight.С помощью этого атрибута вы можете определить, какие строки и столбцы растут и уменьшаются, чтобы занять дополнительное пространство.Также полезно знать, что вы можете применять эти атрибуты к пустым строкам и столбцам.Это полезно, если вы хотите, чтобы ваши внутренние виджеты оставались одинаковыми по размеру, и чтобы любые дополнительные элементы применялись к краям вашего графического интерфейса (как правило, бесполезно, хотя иногда это так).

В соответствии с грубым практическим правилом, каждое окно должно иметь один "основной" виджет - тот, который доминирует в пользовательском интерфейсе.Обычно это виджет холста или текста, но это не обязательно.Найдите этот виджет и дайте строке и столбцу его вес 1 (один), чтобы он увеличивался и уменьшался по мере изменения размера окна пользователем.В вашем случае это будет холст в строке 2, столбец 1.

1 голос
/ 30 мая 2011

Дело в том, что размер ячейки сетки точно такой же, как у кнопки - вы не заметите, будет ли она в E или W ... Вы можете проверить это, разместив все свои виджеты ниже друг друга (все строки 0,и столбец 0-4) вы увидите, что в этом случае кнопка показывает NW.Надеюсь, это поможет ...

...