Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как добавить флажок в древовидную структуру в Tcl/Tk?

Автор вопроса: Abarna RОтветов: 3

Я хотел добавить флажок в ttk::treeview?

я прочитал несколько документов и обнаружил, что невозможно добавить флажок для добавления в ttk::treeview. Есть ли другой вариант сделать это?

tcltk

Ответы

Ответ 1 · рейтинг 1 · Donal Fellows

Виджет дерева просто недостаточно сложен, чтобы сделать это, не без большой работы. (Вы можете приблизиться к этому, создав стили, которые определяют, как выглядят проверенные и непроверенные линии, и используя привязку для переключения между ними... но это было бы довольно ужасно и хрупко.) Да , это означает, что вы не можете делать с ним все, но это, в свою очередь, упрощает изучение API виджета. Это всегда сложный компромисс дизайна.

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

Ответ 2 · рейтинг 1 · Ant

Я использую флажки в ttk:treeview с ванильным кодом, но в первом столбце.

В первом столбце древовидного представления (обозначаемом как #0 или "дерево") вы можете указать изображение (скажем, icon_checked и icon_unchecked), как и для метки.

$win.tv item $item -image icon_checked

Вот вам и графическая часть. Для не очень грязной части:

  • создайте список со статусом для каждой строки вашего дерева (например: "tvstatus" { 0 0 0 1 0})
  • создайте процедуру "tv_refresh", которая обновляет каждую строку в зависимости от списка "tvstatus"
  • создайте привязку к древовидной структуре, которая: 1 изменяет значение одного элемента списка "tvstatus" 2 вызывает "tv_refresh"

Уточните, что вы хотите спросить у пользователя, чтобы получить более конкретный ответ.

Ответ 3 · hae

Я нашел решение на comp.lang.tcl. См. https://groups.google.com/d/msg/comp.lang.tcl/VwG4_7-1538/MWzhZiVcoecJ

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы