Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 27, 2019 15:36:16

panama555
Зарегистрирован: 2019-02-19
Сообщения: 175
Репутация: +  4  -
Профиль   Отправить e-mail  

Почему не сдвигается виджет?

Привет!
Пробую использовать tkinter
Возник такой вопрос:
почему в этой программе Label не прижимается к правому краю рамки fr,

 import tkinter
tk=tkinter.Tk()
tk.geometry("500x500")
fr=tkinter.Frame(tk,bg="red",width=400,height=100)
fr.grid_propagate(0)
fr.grid()
lb=tkinter.Label(fr,text="111222333444")
lb.grid(row=0,column=0,sticky="E")
насколько я понял инструкция “sticky='E'” должна прижать Label к правому краю,
но виджет как был прижат в левый верхний угол так и остался там.
Подскажите, где моя ошибка?

Офлайн

#2 Июнь 27, 2019 17:00:30

rami
Зарегистрирован: 2018-01-08
Сообщения: 281
Репутация: +  72  -
Профиль   Отправить e-mail  

Почему не сдвигается виджет?

Вы используете упаковщик grid(), который представляет сетку состоящую из строк и столбцов, отсчёт столбцов начинается слева на право, ширина столбца равна ширине максимального элемента, так как у вас всего лишь один элемент, то он занимает всю ширину столбца. Чтобы увидеть смещение элементов в разные стороны, нужны несколько элементов с шириной меньше чем ширина столбца.

В следующем примере жёлтая и синяя надписи находятся в одной ячейке с разных сторон:

 import tkinter
 
tk = tkinter.Tk()
tk.geometry("500x500")
 
fr=tkinter.Frame(tk,bg="red", width=400, height=100)
fr.grid_propagate(0)
fr.grid()
 
lb1 = tkinter.Label(fr, bg='green', text="1234567890987654321")
lb1.grid(row=0, column=0)  #это самая большая надпись, определяет ширину столбца сетки
 
lb2 = tkinter.Label(fr, bg='yellow', text="12345")
lb2.grid(row=1, column=0, sticky="w")   #эта надпись меньше ширины столбца, будет выравнена влево
 
lb3 = tkinter.Label(fr, bg='blue', text="12345")
lb3.grid(row=1, column=0, sticky="e")   #эта надпись меньше ширины столбца, будет выравнена вправо
 
tk.mainloop()

Офлайн

#3 Июнь 27, 2019 17:38:01

rami
Зарегистрирован: 2018-01-08
Сообщения: 281
Репутация: +  72  -
Профиль   Отправить e-mail  

Почему не сдвигается виджет?

По умолчанию ширина столбца равна ширине максимального элемента, но её можно изменить (например, сделать равной ширине фрейма), тогда вы увидите выравнивание так, как вы хотели:

 import tkinter
 
tk=tkinter.Tk()
tk.geometry("500x500")
 
fr=tkinter.Frame(tk, bg="red", width=400, height=100)
fr.grid_propagate(0)
fr.grid()
fr.columnconfigure(0, minsize=400)  #задаём ширину столбца равную ширине фрейма
 
lb=tkinter.Label(fr, bg='green', text="111222333444")
lb.grid(row=0, column=0, sticky="E")   #теперь видим выравнивание
 
tk.mainloop()

Офлайн

#4 Июнь 28, 2019 10:54:31

panama555
Зарегистрирован: 2019-02-19
Сообщения: 175
Репутация: +  4  -
Профиль   Отправить e-mail  

Почему не сдвигается виджет?

А я думал, что столбец растягивается по ширине фрейма на котором расположен.
Поэтому и не понял в чём проблема.
Спасибо за подсказку.

Отредактировано panama555 (Июнь 28, 2019 11:27:47)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version