Как сделать столбцы Tkinter равной ширины, когда виджеты охватывают несколько столбцов (Python 2.7)

В дальнейшем кнопки с надписью «ONE», «TWO» и «THR» не получают равномерно распределенных интервалов. Мне кажется, что корень проблемы заключается в том, что Tk принимает минимальную ширину по умолчанию для любого столбца, содержащего часть виджета, которая охватывает несколько столбцов. Однако это поведение, как представляется, недокументировано, поэтому я не уверен, как его разместить или настроить, чтобы получить столбцы равной ширины – включая два столбца, натянутых текстовым виджетами, и один столбец, не охваченный текстом виджет – и, таким образом, выравнивать кнопки равномерно. Я мог бы уничтожить его пробным путем и ошибкой, т. Е. Заполнить последний столбец, пока он не совпадёт с предыдущими, но это плохое решение.

EDIT: После обсуждения ниже с @ jwillis0720, я добавил дополнительный столбец (3) и кнопку ('FIV'), чтобы сделать проблему более понятной. Этот вопрос связан с тем, как получить столбцы одинаковой ширины, когда некоторые из этих столбцов связаны с несколькими столбцами, а другие нет.

import Tkinter master = Tkinter.Tk() Tkinter.Button(master, text='ONE').grid(row=0, column=0) Tkinter.Button(master, text='TWO').grid(row=0, column=1) Tkinter.Button(master, text='THR').grid(row=0, column=2) Tkinter.Button(master, text='FOU').grid(row=1, column=2) Tkinter.Button(master, text='FIV').grid(row=0, column=3) # added as per above edit Tkinter.Text(master).grid(row=1, column=0, columnspan=2) master.mainloop() 

Обратите внимание, что использование grid_columnconfigure с использованием uniform не решает эту проблему. Вставка следующих строк (см. Ответ на аналогичный вопрос здесь: Как создать столбцы равной ширины в Python 2.7 с помощью Tkinter ) просто упрощает столбцы; они остаются неравномерными:

 master.grid_columnconfigure(0, weight=1, uniform='a') master.grid_columnconfigure(1, weight=1, uniform='a') master.grid_columnconfigure(2, weight=1, uniform='a') master.grid_columnconfigure(3, weight=1, uniform='a') # added as per above edit 

2 Solutions collect form web for “Как сделать столбцы Tkinter равной ширины, когда виджеты охватывают несколько столбцов (Python 2.7)”

Я думаю, вы можете использовать липкий вариант.

sticky = Определяет, как расширить виджет, если результирующая ячейка больше самого виджета. Это может быть любая комбинация констант S, N, E и W или NW, NE, SW и SE.

Например, W (запад) означает, что виджет должен быть выровнен с левой границей ячейки. W + E означает, что виджет должен растягиваться горизонтально, чтобы заполнить всю ячейку. W + E + N + S означает, что виджет должен быть расширен в обоих направлениях. Значение по умолчанию – центрировать виджет в ячейке.

 import Tkinter master = Tkinter.Tk() Tkinter.Button(master, text='ONE').grid(row=0, column=0, sticky='NW') Tkinter.Button(master, text='TWO').grid(row=0, column=1, sticky='NW') Tkinter.Button(master, text='THR').grid(row=0, column=2, sticky='NW') Tkinter.Button(master, text='FOU').grid(row=1, column=2) Tkinter.Text(master).grid(row=1, column=0, columnspan=2) master.mainloop() 

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

На что это похоже. Mine выглядит так равномерно, за исключением того, что текстовый виджет занимает два столбца, как указано.

Это похоже на это

 import tkinter master = tkinter.Tk() tkinter.Button(master, text='ONE ').grid(row=0, column=3, sticky='NW') tkinter.Button(master, text='TWO ').grid(row=1, column=3, sticky='NW') tkinter.Button(master, text='THR ').grid(row=2, column=3, sticky='NW') tkinter.Button(master, text='FOU ').grid(row=3, column=3, sticky='NW') tkinter.Text(master).grid(column=30, columnspan=10) 
  • Больше опций tkinter optionmenu исчезает
  • Как связать ключ пробела с определенным методом в tkinter (python)
  • Tkinter IntVar возвращает PY_VAR0 вместо значения
  • Как сохранить выделение в списке tkinter?
  • Доступ к переменной внутри метода класса
  • Python PIL Изображение в автоматическом изменении метки
  • Устанавливать фокус на окне Tkinter (зависит от платформы?)
  • Нарисуйте прямоугольник на щелчке мыши
  • Python - лучший язык программирования в мире.