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

问题描述 投票:0回答:5

我有一个创建

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)
...

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

python tkinter optionmenu
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
投票
optionmenu.configure(width=<YOUR_WIDTH_HERE>)

0
投票

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

当然,糟糕的解决方案是使用等宽字体并在下拉列表中所有选项的末尾添加空格。我只是不明白为什么没有真正的解决方案。结果,这些下拉菜单看起来绝对很糟糕。


0
投票

这可以通过

来完成
frame.columnconfigure(1, minsize=120)
optmenu = ttk.OptionMenu(frame,...)
optmenu.grid(row=1, column=1, sticky=tk.EW)

这不是最佳选择,因为您必须猜测列的像素宽度,但它可以工作。

这里有一些链接,我发现对于得出这个答案很有用。

https://www.pythontutorial.net/tkinter/tkinter-grid/

设置网格中列的最小宽度

© www.soinside.com 2019 - 2024. All rights reserved.