Найти - Пользователи
Полная версия: Почему не сдвигается виджет?
Начало » Python для новичков » Почему не сдвигается виджет?
1
panama555
Привет!
Пробую использовать 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 к правому краю,
но виджет как был прижат в левый верхний угол так и остался там.
Подскажите, где моя ошибка?
rami
Вы используете упаковщик 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()
rami
По умолчанию ширина столбца равна ширине максимального элемента, но её можно изменить (например, сделать равной ширине фрейма), тогда вы увидите выравнивание так, как вы хотели:

 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()
panama555
А я думал, что столбец растягивается по ширине фрейма на котором расположен.
Поэтому и не понял в чём проблема.
Спасибо за подсказку.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB