繁体   English   中英

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

[英]How do I set the values of tkinter combobox from dictionary keys

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)

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

你非常接近!

combobox_values = "\n".join(my_dict.keys())

应该

combobox_values = my_dict.keys()

通过使用join ,您可以从字典中获取所有键,然后将它们放在一个字符串中! 当Tkinter尝试描绘您的字符串时,它会确定空格与分解项目的换行符一样好。


实际上追踪引擎盖下使用的描述有点棘手。 官方文档没有提到

检查源代码Combobox继承自Entry小部件,但两者都对底层tcl进行原始调用。 新墨西哥州 (通常是声誉良好的)声称价值必须在列表中,但显然字符串也有效。 由于字符串和列表在python中非常相似 ,故障 - 慢速方法ttk看似合适......但它没有回答问题......

事实上,这是一个有趣的游戏:尝试打破构造函数。 传递一个随机数? 以下所有工作

ttk.Combobox(root, values=12345) 
class Foo:pass
ttk.Combobox(root, values=Foo())
ttk.Combobox(root, values=Foo)

在进一步调查之后,最后的python调用发生在Tkinter.py第2058 Tkinter.py (或者左右,依赖于实现)。 如果你真的很好奇,你可以从tcl文档追溯到他们详细的小部件 ,特别是“保留额外的项目数据”一章,看看这些事情是如何以及为什么发生的

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

尝试combobox_values = list(my_dict.keys())因为我没有得到 python 3.8 的预期结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM