Tkinter: разделители списка, отключенные элементы, навигация с помощью клавиатуры?

Я изучаю виджет Tkinter Listbox и не смог найти решения для следующих функций:

  1. Как я могу создать невыбираемые элементы горизонтального разделителя, например. разделители, эквивалентные .add_separator() виджета Tkinter Menu? (Использование символов, таких как тире и подчеркивание, выглядит ужасно).

  2. Как я могу отключить определенный элемент? Я безуспешно пытался использовать .itemconfig(index, state='disabled').

  3. Как я могу включить навигацию с помощью клавиатуры, например. когда ввод пользователя с клавиатуры автоматически прокручивается на один вперед до ближайшего элемента, который начинается с текста, введенного пользователем? Должен ли я bind(<KeyPress>, ...) сам управлять этим поведением?

  4. Будет ли проще реализовать некоторые из вышеперечисленных функций с помощью текстового виджета или виджета ttk.Treeview?


person Malcolm    schedule 10.11.2010    source источник
comment
Я полагаю, что вы получите лучший ответ, если спросите об этом отдельно.   -  person Steven Rumbalski    schedule 10.11.2010
comment
@Steven: я не был уверен, какова позиция сообщества в отношении того, как разбивать вопросы на части. Буду разбивать будущие посты на отдельные вопросы.   -  person Malcolm    schedule 10.11.2010
comment
@Malcom Я тоже не уверен, что об этом думает сообщество. Я прочитал ваш вопрос, думал, что смогу ответить на пару из них, но не стал, потому что не мог ответить на все.   -  person Steven Rumbalski    schedule 10.11.2010
comment
@Steven: Если у вас другие ответы, чем у Брайана, дайте мне знать, и я повторно опубликую свой первоначальный вопрос как отдельные вопросы. В будущем я опубликую более детальные вопросы.   -  person Malcolm    schedule 10.11.2010
comment
@Malcom: Брайан совершенно прав.   -  person Steven Rumbalski    schedule 10.11.2010


Ответы (1)


  1. вы не можете. Виджет не поддерживает это.

  2. вы не можете отключить определенные элементы, виджет не поддерживает атрибут состояния. При этом вы можете отслеживать выбор и делать соответствующие действия, если пользователь выбирает что-то отключенное, и использовать передний план элемента для обозначения отключенности.

  3. Вам нужно будет привязываться к событиям нажатия клавиш и управлять поведением самостоятельно. Это не особо сложно, просто немного утомительно.

  4. текстовый виджет может быть вашим лучшим выбором, хотя вам придется добавить привязки, чтобы имитировать привязки по умолчанию для списка.

Итог: Tkinter не предоставляет ничего, что напрямую поддерживает то, что вы хотите сделать, но все строительные блоки есть. Вам просто нужно построить его самостоятельно.

person Bryan Oakley    schedule 10.11.2010
comment
Спасибо. Умная идея (2) для имитации инвалидности. Я собираюсь искать символ Unicode как лучший разделитель, чем традиционное тире или подчеркивание. - person Malcolm; 10.11.2010