Как заставить OptionMenu сохранять ту же ширину?

#python #tkinter #optionmenu

#python #tkinter #optionmenu

Вопрос:

У меня есть фрагмент, который создает OptionMenu виджет.

 ...
options = ('White', 'Grey', 'Black', 'Red', 'Orange', 
           'Yellow', 'Green', 'Blue', 'Cyan', 'Purple')
var = StringVar()
optionmenu = OptionMenu(par, var, *options)
optionmenu.grid(column=column, row=row)
...
  

Одна из проблем, с которой я столкнулся, заключается в том, что каждый раз, когда выбирается новая опция, ширина виджета меняется. Я полагаю, это связано с изменением ширины текста внутри виджета. Как мне заставить виджет сохранять постоянную ширину?

Ответ №1:

Насколько мне известно, вы можете использовать optionmenu.config(width=<YOUR_WIDTH>) следующим образом:

 ...
optionmenu = OptionMenu(par, var, *options)
optionmenu.config(width=<YOUR_WIDTH>)
optionmenu.grid(column=column, row=row)
...
  

Ответ №2:

Когда вы используете grid команду для размещения виджета в его родительском элементе, попросите виджет заполнить его ячейку (попробуйте sticky="ew" )

Комментарии:

1. У меня это не работает. Я использую выпадающий список во фрейме. Тем не менее, он расширяет его для длинных опций в выпадающем списке.

2. Альтернативным вариантом может быть поиск максимальной ширины всех виджетов в этом столбце, а затем установка переменной по умолчанию в меню опций значения «» *(max_width /font_size_of_option_widget). Размер виджета можно получить с помощью widget.update(), а затем widget.winfo_width()

Ответ №3:

 optionmenu.configure(width=<YOUR_WIDTH_HERE>)
  

Ответ №4:

Я нахожусь в той же ситуации, что и OP 12 лет назад — размещаю выпадающие списки во фрейме, только чтобы обнаружить, что не существует решения для настройки их расширения по горизонтали и заполнения этого фрейма. В результате они всегда изменяют размер (и перецентрируют) каждый раз, когда выбирается параметр другой длины. sticky=» не имеет никакого эффекта вообще. width=» работает, но теперь вы устанавливаете фиксированную ширину, которая оптимизирована только для одного разрешения.

Конечно, ужасное решение — использовать моноширинный шрифт и добавлять пробелы в конце всех опций в выпадающем списке. Я просто не понимаю, как для этого не может быть реального решения. В результате эти выпадающие списки выглядят абсолютно чудовищно.