collapseframe

Difference between version 4 and 5 - Previous - Next
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
}
======