Tkinter кнопка не реагирует на sticky="e"
хочу что бы кнопки очистить и отправить находились в правом углу, поменять колонки у button1.grid(row=0, column=0) не помогло, tk.LEFT тоже.
import tkinter as tk
window = tk.Tk()
row_list = [
'Имя:','Фамилия:',
'Адрес 1:', 'Адрес 2:',
'Город', 'Регион:',
'Почтовый индекс:',
"Страна"]
frame1 = tk.Frame(master=window)
for i in range(len(row_list)):
frame1 = tk.Frame(master=window)
frame1.grid(row=i, column=0)
frame2 = tk.Frame(master=window)
frame2.grid(row=i, column=1)
label = tk.Label(master=frame1, text=row_list[i])
entry = tk.Entry(master=frame2, width=40)
label.pack()
entry.pack()
frame3 = tk.Frame(master=window)
button1 = tk.Button(master=frame3, width=12, text='Отправить')
button2 = tk.Button(master=frame3, width=12, text='Очистить')
frame3.grid(row=len(row_list), column=2)
button1.grid(row=0, column=0, sticky="e")
button2.grid(row=0, column=1, sticky="e")
window.mainloop()
Ответы (1 шт):
sticky="e" при размещении виджетов (кнопок) влияет на расположение этих виджетов внутри контейнера, где они находятся (frame3), но не влияет на то, как этот контейнер будет расположен внутри родительского контейнера (window) - по факту frame3 просто центрируется в своей строке и колонке сетки. Нужно просто добавить sticky="e" при размещении frame3:
frame3.grid(row=len(row_list), column=1, sticky="e")
а для кнопок можно убрать.
Кстати, не понятно зачем для каждой метки и поля ввода создавать отдельный фрейм, можно было просто их все в одном фрейме разместить (плюс тогда можно использовать pack для размещения фреймов, т.к. grid для размещения двух фреймов в окне будет излишним):
frame1 = tk.Frame(master=window)
frame1.pack()
for i in range(len(row_list)):
label = tk.Label(master=frame1, text=row_list[i])
label.grid(row=i, column=0)
entry = tk.Entry(master=frame1, width=40)
entry.grid(row=i, column=1)
frame3 = tk.Frame(master=window)
frame3.pack(side=tk.RIGHT)
button1 = tk.Button(master=frame3, width=12, text='Отправить')
button2 = tk.Button(master=frame3, width=12, text='Очистить')
button1.grid(row=0, column=0)
button2.grid(row=0, column=1)
# Или:
# button1.pack(side=tk.LEFT)
# button2.pack()
Скриншот:

