---
name: "Widget"
section: "n"
platform: "macos"
package: "tcl"
version: "152"
release: "macOS 26.5"
platforms: ["macos"]
url: "https://new.carta.tech/Widget/n"
---

# Widget(n)

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
