#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=» работает, но теперь вы устанавливаете фиксированную ширину, которая оптимизирована только для одного разрешения.
Конечно, ужасное решение — использовать моноширинный шрифт и добавлять пробелы в конце всех опций в выпадающем списке. Я просто не понимаю, как для этого не может быть реального решения. В результате эти выпадающие списки выглядят абсолютно чудовищно.