Я пытаюсь создать макет Tkinter, который имеет метки и поля ввода, вертикально выровненные по нескольким окнам LabelFrame
.Выравнивание виджета с использованием сетки между несколькими Tkinter LabelFrames
Вот несколько упрощенный код:
#!/usr/bin/python
from Tkinter import *
win = Frame()
win.grid(sticky=N+S+E+W)
frame_a = LabelFrame(win, text='Top frame', padx=5, pady=5)
frame_b = LabelFrame(win, text='Bottom frame', padx=5, pady=5)
frame_a.grid(sticky=E+W)
frame_b.grid(sticky=E+W)
for frame in frame_a, frame_b:
for col in 0, 1, 2:
frame.columnconfigure(col, weight=1)
Label(win, text='Hi').grid(in_=frame_a, sticky=W)
Label(win, text='Longer label, shorter box').grid(in_=frame_b, sticky=W)
Entry(win).grid(in_=frame_a, row=0, column=1, sticky=W)
Entry(win, width=5).grid(in_=frame_b, row=0, column=1, sticky=W)
win.mainloop()
Приведенный выше код создает окно, которое выглядит как ниже:
В то время как я ищу, чтобы найти какой-то способ выравнивания полей поэтому окно выглядит более похожее (с благодарностью MS Paint):
Я играл с in_
аргументами до grid()
, но не достиг очень многого, и я не могу думать ни о чем другом, чтобы экспериментировать.
Есть ли способ определить, какая максимальная ширина всего заданного набора меток? Я бы предпочел написать код, который не требует жесткой кодировки определенной ширины, где мне не нужно, поэтому, если возможно, я хотел бы, чтобы код вычислял правильную ширину для использования. –
@me_and: ну, вы знаете (или можете тривиально вычислить) ширину ваших меток, не так ли? Просто установите все метки на ширину, равную самой широкой этикетке. Или вы можете использовать команды шрифта для определения в пикселях точно, насколько широка будет строка и использовать ее. Вы также можете использовать 'winfo_width' в виджетах, чтобы получить его ширину, хотя часто будет сообщать об этом 1x1, пока виджет не будет отображаться на экране. Если вы хотите получить правильный ответ на этот вопрос, задайте его как отдельный вопрос - комментарии не подходят для лучшего ответа. –