A Tcl/Tk collapsable frame megawidget. https://github.com/ch32n/collapseframe '''Instalation''' ====== package require collapseframe ====== '''Dependencies''' collapseframe uses tksvg package. '''Commands''' Create megawidget '''collapseW::create''' ''pathName'' ''pathName'' add ?''name''? ?-'''text '''''text''? ?-'''font '''''font''? Creates entry in collapseframe widget * '''name''': name is optional. If not specified it is dynamically generated. * '''font''': Font to use for label text * '''text''': Specifies a text string to be displayed inside the widget '''''pathName''''' getentrynames returns entry names '''''pathName''''' getentry ''entryname'' returns entry object '''''pathName''''' entryconfigure ''entryname'' ?-'''text '''text? ?-'''font '''font? configure entry '''''pathName''''' delete ''entryname'' delete entry '''Entry commands''' ''entryObject'' cget option ''entryObject'' configure ''entryObject'' getframe ''entryObject'' open ''entryObject'' close ''entryObject'' toggle <<discussion>>Examples ====== package require collapseframe proc createExampleEntry {path text args} { set Frame [$path add {*}$args -text $text] puts "Entry Frame: $Frame" grid columnconfigure $Frame 0 -weight 10 ttk::label $Frame.l1 -text "Ex1 $text" ttk::label $Frame.l2 -text "Ex2 $text" grid $Frame.l1 -sticky nw grid $Frame.l2 -sticky nw return $Frame } font create LargerBold -family "Segoe UI" -size 10 -weight bold -slant italic grid columnconfig . 0 -weight 10 grid rowconfig . 0 -weight 10 set CollapseFrame [collapseW::create .colFrame] grid $CollapseFrame -row 0 -column 0 -sticky nesw createExampleEntry $CollapseFrame Devices -font LargerBold createExampleEntry $CollapseFrame Layout -font LargerBold createExampleEntry $CollapseFrame Neighbors -font LargerBold createExampleEntry $CollapseFrame Maps maps -font LargerBold createExampleEntry $CollapseFrame Junk junk -font LargerBold ====== <<discussion>>Comments '''[nico] - 2025-07-21''' Hi, IMHO this is a great new widget :) (though I didn't tested it yet) would it be possible to extend it to ttk::labelframe ? '''Che2n - 2025-07-22''' Hi, Yes it's possible to use labelframe instead of normal frame. There are 2 frames in '''CreateWidgets '''method of '''collapseW::entry''' class, '''widg(ContF)''' and '''widg(WFrame)''' you can change any of this frames to labelframe and it will work. ====== method CreateWidgets {Path} { #Container Frame of megawidget set widg(ContF) [ttk::frame $Path] set widg(Label) [ttk::label $widg(ContF).l -style $ttkStyle(Label.Opened) -text [my cget -text] -font [my cget -font]] #Frame that is returned set widg(WFrame) [ttk::frame $widg(ContF).wf] set widg(Sep) [ttk::separator $widg(ContF).sp] rename $widg(ContF) ${widg(ContF)}_ return } ======