Python Tkinter:OptionMenu修改下拉列表宽度

时间:2014-09-23 16:53:07

标签: python tkinter size optionmenu

我已经从Tkinter创建了一个OptionMenu,其柱间距为2.但是,下拉列表/菜单与宽度不匹配,因此看起来不太好。关于如何匹配宽度的任何想法?

self.widgetVar = StringVar(self.top)
choices = ['', 'wire', 'register']
typeOption = OptionMenu(self.top, self.widgetVar, *choices)
typeOption.grid(column = 0, columnspan = 2, row = 0, sticky = 'NSWE', padx = 5, pady = 5)

7 个答案:

答案 0 :(得分:2)

无法更改下拉列表的宽度。

您可能需要考虑ttk.Combobox小部件。它有不同的外观,可能是你正在寻找的。

答案 1 :(得分:2)

执行下拉名称 .config(宽度= 宽度) 调整下拉框的大小非常有效。 我设法使其可以使用。

drop1.config(width = 20)

只是让您知道宽度20很长。

答案 2 :(得分:0)

一个想法是用空格填充右侧(或左侧或两侧)。然后,当您需要所选值时,请使用str strip删除它。不是很好,但总比没有好。

from tkinter import ttk
import tkinter as tk

root = tk.Tk()

def func(selected_item):
  print(repr(selected_item.strip()))

max_len = 38
omvar = tk.StringVar()
choices = ['Default Choice', 'whoa', 'this is a bit longer'] + ['choice'+str(i) for i in range(3)]
padded_choices = [x+' '*(max_len-len(x)) for x in choices]
om = ttk.OptionMenu(root, omvar, 'Default Choice', *padded_choices, command=func)
om.config(width=30)
om.grid(row=0, column=0, padx=20, pady=20, sticky='nsew')

root.mainloop()

答案 3 :(得分:0)

我们可以通过以下方式更改下拉宽度:

typesOfSurgeries = ['Chemotherapy','Cataract']
listOfSurgeries = tkinter.OptionMenu(test_frame, variable, *typesofSurgeries)
listOfSurgeries.config(width=20)
listOfSurgeries.grid(row=14,column=1)

listOfSurgeries.config(width=20)设置OptionMenu的宽度

答案 4 :(得分:0)

这个答案有点晚了,但是我想如果其他人正在寻找它,这是我的解决方案:

optionMenu1 = ttk.OptionMenu(btnPane, item_text, item_text.get(), "Choose item!\t\t\t\t\t\t\t\t",
                *list1, *list2(), style='Custom.TMenubutton')

我在这里要做的是仅使用许多选项卡(\ t)设置默认值。原因是下拉菜单的所有项目都具有相同的宽度。最长项目的宽度。在这种情况下,其为默认值。现在,您可以在不剥离任何内容的情况下获得其他项目的价值。而且您的宽度已更改。

如果要测试它,您会看到多少标签(取决于OptionMenu的宽度)。

希望它对某人有帮助。

致谢

答案 5 :(得分:0)

只需使用config()

typeOption.config(width = 50)

答案 6 :(得分:-1)

这已经过时了,但希望答案仍然有用。

N S W E的粘性选项是tkinter包的一部分。所以他们不应该引用。尝试

typeOption.grid(column = 0, columnspan = 2, row = 0, sticky = N+S+W+E, padx = 5, pady = 5)

如果不是“来自tkinter import *”,那么更明显的是

import tkinter as tk
typeOption.grid(column = 0, columnspan = 2, row = 0, sticky = tk.N+tk.S+tk.W+tk.E, padx = 5, pady = 5)

然后通过在frame的columnconfigure函数中使用minsize来确保列不缩小。

**注意还有其他内置参数的参数组合,如NSEW但不是NSWE