簡體   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