在此示例中,如果用户在任何下拉列表中选择任何选项,然后单击另一个下拉列表,则先前选择的项目旁边会显示一个复选标记。即使这个选择是在不同的菜单中选择的。
from Tkinter import *
from ttk import *
choices = ['1st Choice', '2nd Choice', '3rd Choice', '4th Choice']
root = Tk()
for each in range(10):
OptionMenu(root, StringVar(), choices[0], *choices).pack()
root.mainloop()
这种情况在 Python 2.7 和 3.5 上都会发生。
我什至将 choices
列表移动到循环中,以便它在每次迭代时生成,但问题仍然出现。我假设因为列表的元素是相同的对象,所以 tkinter 不会区分它们所在的 OptionMenu。看起来我每次循环都需要一个唯一的列表。
是否有任何方法可以限制复选标记仅显示在用户与之交互的选项菜单上?
最佳答案
这是 OptionMenu 的 ttk 实现中的一个错误。它没有为每个 OptionMenu 中的单选按钮分配唯一的变量。
您可以使用一些代码来解决此问题。基本上,您必须循环菜单中的每个项目并设置 variable
属性。
这是一个例子:
def optionmenu_patch(om, var):
menu = om['menu']
last = menu.index("end")
for i in range(0, last+1):
menu.entryconfig(i, variable=var)
...
for each in range(10):
sv = StringVar()
om = OptionMenu(root, sv, choices[0], *choices)
om.pack()
optionmenu_patch(om, sv)
关于python - ttk.OptionMenu() 在所有菜单上显示复选标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33831289/