You've probably had occasion to use a Dialog (or DialogBox) widget. These widgets are derived from a
Toplevel (which is a subclass of Tk::Wm, the window manager) and spend most of their time in a withdrawn
state. It's also common to use Toplevels as containers for custom built popup windows. Menus, too, are
dialogs derived from the window manager class. For this discussion, we'll use the simple term dialog to
refer any widget that pops up and awaits user interaction, whether it be a Menu, a special purpose
Toplevel, or any of the dialog-type widgets, including, but not limited to, ColorEditor, Dialog,
DialogBox, ErrorDialog, FileSelect, FBox, getOpenFile and getSaveFile.
When it's time to display these dialogs, we call the Perl/Tk window manager Popup method. Popup accepts
three special purpose options that specify placement information in high-level terms rather than
numerical coordinates. It is Popup's responsibility to take our human specifications and turn them into
actual screen coordinates before displaying the dialog.
We can direct the dialog to appear in two general locations, either over another window (e.g. the root
window (screen) or a particular widget), or over the cursor. This is called the popoverlocation. Once
we've made this decision we can further refine the exact placement of the dialog relative to the popover
location by specifying the intersection of two anchorpoints. The popanchorpoint is associated with the
dialog and the overanchorpoint is associated with the popover location (whether it be a window or the
cursor). The point where the two anchor points coincide is the popuplocus. Anchor points are string
values and can be c (for center), or any of the eight cardinal compass points: n, ne, e, se, s, sw, w or
nw.
For example, if -popover specifies a widget, -popanchor is sw, and -overanchor is ne, the the dialog's
southwest corner pops up at the widget's northeast corner.