Updated 2016-08-24 16:03:13 by MHo

Create a modal dialog and wait for response.

Where you have an application that should look (more or less) native on several platforms, use tk_messageBox in preference to this if possible and reasonable.

The function can be found in the installed tcl/tk file dialog.tcl (http://core.tcl.tk/tk/finfo?name=library/dialog.tcl)

Manual edit

tk_dialog window title text bitmap default string string ...


This procedure is part of the Tk script library. Its arguments describe a dialog box:
Name of top-level window to use for dialog. Any existing window by this name is destroyed.
Text to appear in the window manager's title bar for the dialog.
Message to appear in the top portion of the dialog box.
If non-empty, specifies a bitmap to display in the top portion of the dialog, to the left of the text. If this is an empty string then no bitmap is displayed in the dialog.
If this is an integer greater than or equal to zero, then it gives the index of the button that is to be the default button for the dialog (0 for the leftmost button, and so on). If less than zero or an empty string then there won't be any default button.
There will be one button for each of these arguments. Each string specifies text to display in a button, in order from left to right.

After creating a dialog box, tk_dialog waits for the user to select one of the buttons either by clicking on the button with the mouse or by typing return to invoke the default button (if any). Then it returns the index of the selected button: 0 for the leftmost button, 1 for the button next to it, and so on. If the dialog's window is destroyed before the user selects one of the buttons, then -1 is returned.

While waiting for the user to respond, tk_dialog sets a local grab. This prevents the user from interacting with the application in any way except to invoke the dialog box.

RS: You can set the font of all dialogs explicitly (tested on W95) with something like
 option add *Dialog.msg.font {Arial 12}

Larry Smith You can use *Dialog*font {Arial 12} to make the buttons match.

LES on 07 May 2005: when this dialog pops up, we can tab through all the buttons and change which button is highlighted. Pressing space triggers the currently highlighted button's action, but pressing Enter/Return always triggers the default button, even if is not the one highlighted. Bug or feature?

MGS [2005/05/17] I believe this is a feature. The default button is defined when the dialog is created - I believe this should not change. The active button can be invoked using the spacebar.

SYStems Since the word modal bedazzled me I searched the net and found [1] and I quote

A dialog can be either modeless (the default) or modal. A modal dialog is one which blocks input to all other toplevel windows in the app context, except for any windows created with the dialog as their owner

Of course the word default applies to Java, not Tk.

Example edit

  set default 1
  set answer [tk_dialog .dialog1 "The Question" "You can have" question $default \
                        Cancel Water "No Tea" {No Milk} "No Coffee"]
  tk_messageBox -icon info -title "The Answer" -message "answer=$answer."

LGT bitmap parameter can be "@" followed by a path to an .xbm file.
  set answer [tk_dialog .dialog1 "The Question" "You can have" "@../images/myquestionicon.xbm" $default \
                        Cancel Water "No Tea" {No Milk} "No Coffee"]

MHo: How to arrange that clicking on the close button of the dialog window closes it?

See also edit