Почему эти кнопки имеют разный размер при использовании одинаковых весов в сетке?
class Screen(tk.Tk):
def __init__(self):
super().__init__()
f = tk.Frame(self)
f.pack(fill=tk.BOTH, expand=True)
f.grid_columnconfigure(0, weight=1)
f.grid_columnconfigure(1, weight=1)
f.grid_columnconfigure(2, weight=1)
f.grid_columnconfigure(3, weight=1)
l1 = tk.Label(f, text='Text')
l1.grid(row=0, column=0, columnspan=4, sticky='nsew')
l2 = tk.Label(f, text='Text', anchor='w')
l2.grid(row=1, column=0, sticky='sw')
self.e1 = tk.Entry(f)
self.e1.grid(row=2, column=0, columnspan=3, sticky='nsew')
self.b1 = tk.Button(f, text='B1')
self.b1.grid(row=2, column=3, sticky='nsew')
l3 = tk.Label(f, text='Text', anchor='w')
l3.grid(row=3, column=0, sticky='sw')
self.e2 = tk.Entry(f)
self.e2.grid(row=4, column=0, ipady=2, columnspan=3, sticky='nsew')
self.b2 = tk.Button(f, text='B2')
self.b2.grid(row=5, column=2, sticky='nsew')
self.b3 = tk.Button(f, text='B3')
self.b3.grid(row=5, column=3, sticky='nsew', command=self.test)
self.update_idletasks()
self.geometry(f'500x{self.winfo_reqheight()}')
self.resizable(False, False)
def test(self):
a = self.b1.winfo_width()
b = self.b2.winfo_width()
c = self.b3.winfo_width()
print(a, b, c)
Вывод: 111 110 111
Кнопки B1
и B3
находятся в столбце 3 таблицы, а B2
- в столбце 2. Единственный способ убедиться, что они имеют одинаковый размер, - это установить для их конфигурации width
что-то вроде width=10
.
Желаемая раскладка:
+---------------------------------------------------------+
| L1 |
+--------------+------------+--------------+--------------+
| L2 | | | |
+--------------+------------+--------------+--------------+
| E1 | B1 |
+--------------+------------+ -------------+--------------+
| L3 | | | |
+--------------+------------+--------------+--------------+
| E2 | |
+--------------+------------+ -------------+--------------+
| | | B2 | B3 |
+--------------+------------+--------------+--------------+
Попытка сделать столбцы как можно ближе к равномерному масштабу. Но макет представляет собой сетку из 5 строк и 4 столбцов. Верхняя метка L1
будет охватывать все столбцы в первой строке. Два виджета ввода E1
и E2
будут занимать первые 3 столбца в соответствующих строках. По какой-то причине B2
получает меньший размер.
Редактировать: Лучшее, что я могу определить, - это то, что виджет Entry
вызывает взвешенные проблемы, но я не знаю, почему. На эту же тему отвечает Брайан Оукли здесь , но меня смущает вопрос, почему ширина по умолчанию для виджета не перезаписывается ключевым словом weight менеджера сетки.