root = Tk()
my_dict = {'Drosophila melanogaster':1
'Danio rerio': 2,
'Caenorhabditis elegans':3,
'Rattus norvegicus': 4,
'Mus musculus': 5,
'Homo sapiens': 6,
}
combobox_values = "\n".join(my_dict.keys())
organism = ttk.Combobox(root, values=combobox_values)
organism.grid(row=2, column=0, sticky="w", padx=2, pady=2)
我正在尝试使用每个字典键作为组合框中的选项,但是当我运行我的脚本时,每个单词都成为一个单独的选项。 如果有人能告诉我我做错了什么,我真的很感激?
答案 0 :(得分:8)
你非常接近!
combobox_values = "\n".join(my_dict.keys())
应该是
combobox_values = my_dict.keys()
通过使用join,您可以从字典中获取所有键,然后将它们放在一个字符串中!当Tkinter试图描绘你的字符串时,它会确定空格与分解项目的换行符一样好。
实际追踪引擎盖下使用的描绘有点棘手。 The official docs don't mention
检查源代码Combobox
是否继承自Entry
小部件,但两者都对底层tcl进行原始调用。 New Mexico(通常声誉良好)声称值必须在列表中,但显然字符串也可以。自strings and lists are very similar in python以来,失败 - 缓慢的方法ttk似乎是合适的......但它没有回答这个问题......
事实上,这是一个有趣的游戏:尝试打破构造函数。传递一个随机数?以下所有工作
ttk.Combobox(root, values=12345)
class Foo:pass
ttk.Combobox(root, values=Foo())
ttk.Combobox(root, values=Foo)
经过进一步调查后,最终的python调用发生在Tkinter.py
的第2058行(或左右,依赖于实现)。如果您真的很好奇,可以从tcl docs追溯到their detailed widgets section,特别是章节"保留额外项目数据"看看这些事情是如何发生的以及为什么会这样发生
在后两种情况下,显示方法清楚地表明输入被包装为自己的字符串表示(与新墨西哥州的解释一致),但基本方法仍然是回避