python - ttk.OptionMenu() 在所有菜单上显示复选标记

标签 python tkinter optionmenu

在此示例中,如果用户在任何下拉列表中选择任何选项,然后单击另一个下拉列表,则先前选择的项目旁边会显示一个复选标记。即使这个选择是在不同的菜单中选择的。

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)

错误跟踪器问题:http://bugs.python.org/issue25684

关于python - ttk.OptionMenu() 在所有菜单上显示复选标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33831289/

相关文章:

python - 无法将信息传递给回调函数

python - 限制输入到SQLite3的字符数

python - 使用未知长度列表填充 Tkinter OptionMenu,即串行端口列表

java - Android:如何设置 MenuButton 的监听器?

python - 与 Tkinter 跟踪关联的回调函数有哪些限制?

python - 如何使用 azureml-dataprep 运行带有WITH 子句的 SQL 查询?

Pythonic 变量赋值

python - 将列表合并为一个

python - 大量使用后,Tkinter程序崩溃

android - 为什么 ActionbarSharelock 即使有空间也只显示溢出图标