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

# Toplevel(n)

base class for mega-widgets in a top-level window

## NAME

Toplevel - base class for mega-widgets in a top-level window

## INHERITANCE

itk::Archetype \<- itk::Toplevel

## STANDARD OPTIONS

```
background	cursor
```

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

## WIDGET-SPECIFIC OPTIONS

```
Name:   title
Class:  Title
Command-Line Switch:    -title
```

-

  Sets the title that the window manager displays in the title bar above the window.  The default title is the null string.

## DESCRIPTION

The **Toplevel** class inherits everything from the **Archetype** class, and adds a Tk toplevel 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 **Toplevel** class is implemented with a Tk toplevel, mega-widgets in the **Toplevel** class have their own toplevel window.  This class is used to create dialog boxes and other pop-up windows.

## COMPONENTS

```
Name:	hull
Class:	Toplevel
```

-

  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 **MessageInfo** mega-widget.  It creates a pop-up message that the user can dismiss by pushing the "Dismiss" button. option add \*MessageInfo.title "Notice" widgetDefault

itcl::class MessageInfo {\
     inherit itk::Toplevel

    constructor {args} {\
         itk\_component add dismiss {\
             button $itk\_interior.dismiss -text "Dismiss"                 -command "destroy $itk\_component(hull)"\
         }\
         pack $itk\_component(dismiss) -side bottom -pady 4

        itk\_component add separator {\
             frame $itk\_interior.sep -height 2 -borderwidth 1 -relief sunken\
         }\
         pack $itk\_component(separator) -side bottom -fill x -padx 4

        itk\_component add icon {\
             label $itk\_interior.icon -bitmap info\
         }\
         pack $itk\_component(icon) -side left -padx 8 -pady 8

        itk\_component add infoFrame {\
             frame $itk\_interior.info\
         }\
         pack $itk\_component(infoFrame) -side left -expand yes             -fill both -padx 4 -pady 4

        itk\_component add message {\
             label $itk\_interior.mesg -width 20\
         } {\
             usual\
             rename -text -message message Text\
         }\
         pack $itk\_component(message) -expand yes -fill both

        eval itk\_initialize $args

        after idle \[code $this centerOnScreen\]\
     }

    protected method centerOnScreen {} {\
         update idletasks\
         set wd \[winfo reqwidth $itk\_component(hull)\]\
         set ht \[winfo reqheight $itk\_component(hull)\]\
         set x \[expr (\[winfo screenwidth $itk\_component(hull)\]-$wd)/2\]\
         set y \[expr (\[winfo screenheight $itk\_component(hull)\]-$ht)/2\]\
         wm geometry $itk\_component(hull) +$x+$y\
     } }

itk::usual MessageInfo {\
     keep -background -cursor -foreground -font\
     keep -activebackground -activeforeground -disabledforeground\
     keep -highlightcolor -highlightthickness }

\# # EXAMPLE:  Create a notice window: # MessageInfo .m -message "File not found:\\n/usr/local/bin/foo"

## KEYWORDS

itk, Archetype, Widget, mega-widget
