---
name: "Widget"
section: "3itk"
platform: "linux"
package: "itk3-doc"
version: "3.4.2-5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Widget"
---

# Widget(3itk)

base class for mega-widgets within a frame

```

```

## NAME

Widget - base class for mega-widgets within a frame

## INHERITANCE

itk::Archetype \<- itk::Widget

## STANDARD OPTIONS

```
background	cursor
```

See the "options" manual entry for details on the standard options.

```

```

## DESCRIPTION

The **Widget** class inherits everything from the **Archetype** class, and adds a Tk frame called the "hull" component to represent the body of the mega-widget.  The window class name for the hull is set to the most-specific class name for the mega-widget. The protected variable **itk\_interior** contains the window path name for the "hull" component.  Derived classes specialize this widget by packing other widget components into the hull.

Since the hull for the **Widget** class is implemented with a Tk frame, mega-widgets in the **Widget** class can be packed into other frames and toplevels.

## COMPONENTS

```
Name:	hull
Class:	Frame
```

-

  The "hull" component acts as the body for the entire mega-widget. Other components are packed into the hull to further specialize the widget.

## EXAMPLE

The following example implements a simple **TextDisplay** mega-widget.  It creates a read-only display of text with a text widget and a scrollbar.

```
option add *TextDisplay.wrap none widgetDefault
option add *TextDisplay.textBackground ivory widgetDefault
option add *TextDisplay.width 40 widgetDefault
option add *TextDisplay.height 10 widgetDefault
itcl::class TextDisplay {
    inherit itk::Widget
    constructor {args} {
        itk_component add text {
            text $itk_interior.info -state disabled                 -yscrollcommand [code $itk_interior.sbar set]
        } {
            usual
            keep -tabs -wrap -width -height
            rename -background -textbackground textBackground Background
        }
        pack $itk_component(text) -side left -expand yes -fill both
        itk_component add scrollbar {
            scrollbar $itk_interior.sbar                 -command [code $itk_interior.info yview]
        }
        pack $itk_component(scrollbar) -side right -fill y
        eval itk_initialize $args
    }
    public method display {info}
    public method append {info}
}
itcl::body TextDisplay::display {info} {
    $itk_component(text) configure -state normal
    $itk_component(text) delete 1.0 end
    $itk_component(text) insert 1.0 $info
    $itk_component(text) configure -state disabled
}
itcl::body TextDisplay::append {info} {
    $itk_component(text) configure -state normal
    $itk_component(text) insert end $info
    $itk_component(text) configure -state disabled
}
itk::usual TextDisplay {
    keep -background -cursor -foreground -font
    keep -activebackground -activerelief
    keep -highlightcolor -highlightthickness
    keep -insertbackground -insertborderwidth -insertwidth
    keep -insertontime -insertofftime
    keep -selectbackground -selectborderwidth -selectforeground
    keep -textbackground -troughcolor
}
#
# EXAMPLE:  Display the /etc/passwd file
#
TextDisplay .file -background red
pack .file
.file display [exec cat /etc/passwd]
```

## KEYWORDS

itk, Archetype, Widget, mega-widget
