如何从字典键设置tkinter组合框的值

时间:2016-06-16 04:05:45

标签: python user-interface combobox tkinter tk

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)

我正在尝试使用每个字典键作为组合框中的选项,但是当我运行我的脚本时,每个单词都成为一个单独的选项。 如果有人能告诉我我做错了什么,我真的很感激?

1 个答案:

答案 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,特别是章节"保留额外项目数据"看看这些事情是如何发生的以及为什么会这样发生

在后两种情况下,显示方法清楚地表明输入被包装为自己的字符串表示(与新墨西哥州的解释一致),但基本方法仍然是回避