2016-06-16 1 views
3
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) 

Я пытаюсь использовать каждый ключ словаря в качестве опции в выпадающем списке, но когда я бег моего сценария, каждое слово становится отдельным вариантом. Я был бы очень признателен, если бы кто-нибудь мог сказать мне, что я делаю неправильно?Как установить значение TkInter выпадающего список из словаря ключей

ответ

7

Вы были очень близки!

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 вызов происходит по линии 2058 из Tkinter.py (или около того, в зависимости от реализации). Если вам действительно интересно, вы можете проследить от tcl docs до their detailed widgets section, в частности, главу «Сохранение дополнительных данных элемента», чтобы узнать, как и почему это происходит, как и они.

В последних двух методах отображения , что ввод завершается как его собственное представление строки (в соответствии с интерпретацией Нью-Мексико), но лежащий в основе метод остается уклончивым

Смежные вопросы