如何让OptionMenu保持相同的宽度?

15

我有一段代码片段,可以创建一个 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)
...

我遇到的一个问题是每当选择一个新选项时,小部件的宽度就会改变。我相信这是由于小部件内的文本宽度发生了变化。如何使小部件保持一致的宽度?

5个回答

35

据我所知,你可以使用以下方式来使用optionmenu.config(width=<YOUR_WIDTH>):

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

17

当您使用 grid 命令将小部件放置在其父级中时,请使小部件填充其单元格(尝试 sticky="ew"


3
这对我不起作用。我正在使用一个框架中的下拉菜单,但是对于下拉菜单中的长选项它会使其扩展。 - technazi
1
另一种方法是找到该列中所有小部件的最大宽度,然后将选项菜单中变量的默认值设置为“”*(max_width/font_size_of_option_widget)。可以使用widget.update()获取小部件的大小,然后使用widget.winfo_width()获取其宽度。 - Sharpfawkes

3
optionmenu.configure(width=<YOUR_WIDTH_HERE>)

0

我和12年前的OP处于完全相同的境地 - 在框架中放置下拉菜单,只发现没有解决方案可以将它们设置为水平扩展并填充该框架。结果,每次选择不同长度的选项时,它们总是重新调整大小(和重新居中)。sticky=''根本没有任何效果。width=''有效,但现在您正在设置仅针对一个分辨率进行优化的固定宽度。

当然,可怕的解决方案是使用等宽字体,并在下拉菜单中所有选项的末尾添加空格。我只是不明白为什么没有真正的解决方案。因此,这些下拉菜单看起来非常糟糕。


我已经回答了这个问题,以防你正在寻找更好的解决方案。 - toppk
谢谢,我会看一下。你有链接吗? - Nathan
把这里的回答翻译成中文。返回仅翻译的文本:https://dev59.com/N2035IYBdhLWcg3wGL9T#76903139 - toppk

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接