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

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

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


person Abarna R    schedule 12.09.2012    source источник


Ответы (3)


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

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

person Donal Fellows    schedule 12.09.2012

Я использую флажки в 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»

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

person Ant    schedule 19.09.2012

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

person hae    schedule 02.02.2014
comment
Вы должны цитировать из этой статьи, а также ссылки. URL-адреса Google не всегда остаются действительными. (Увы.) - person Donal Fellows; 03.02.2014