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

6

我用Tkinter创建了一个OptionMenu,使用了columnspan为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)
6个回答

5

使用下拉框名称.config(width = 宽度),可以很好地调整下拉框的大小。 我设法让它正常工作了。

drop1.config(width = 20)

只是想提醒您,20的宽度相当长。


3

无法更改下拉菜单的宽度。

您可以考虑使用ttk.Combobox小部件。它有一个不同的外观,可能是您要寻找的。


1

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

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

1
这个答案可能有点晚,但我认为如果其他人正在寻找答案,这里是我的解决方案:
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)设置默认值。原因是下拉菜单的所有项目都具有相同的宽度,即最长项目的宽度。在这种情况下,它是“Default”。现在,您可以获取其他项目的值而不需要去除任何内容。而且您的宽度已经改变。
测试后,您将看到需要多少制表符(取决于OptionMenu的宽度)。
希望对某人有所帮助。
问候。

0

只需使用config()

typeOption.config(width = 50)

-1
我们可以通过以下方式编写来更改下拉菜单的宽度:
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 的宽度


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