Modale Dialoge mit Tk:messageBox

Tk::messageBox zeigt ein Pop-up an und wartet auf eine Antwort durch den Nutzer. Optional können ein Text und ein Icon angezeigt werden. Das Pup-up ist modal, die Haupt-Anwendung wird blockiert bis der Dialog durch den Nutzer beantwortet wurde. Die Buttons, mit denen der Nutzer das Pop-up bestätigen kann, können aus einer Reihe von vordefinierten Kombinationen gewählt werden. Die Buttons sind übrigens automatisch lokalisiert und richten sich nach der Sprache des Betriebssystems.

Aufgrund des fest definierten Funktionsumfangs bietet sich die messageBox als schnelles, unkompliziertes Widget für einfache Abfragen an.

Die wichtigsten Optionen der MesssageBox

Option Beschreibung Mögliche Werte Standardwert
-default bestimmt, welche Schaltfläche (siehe -type) standardmäßig fokussiert wird yes, no, cancel, abort, retry, ignore die jeweils erste Schaltfläche von links
-icon Symbol links von der Nachricht, optional error, info, question, warning kein Symbol
-message Nachricht, die der Dialog anzeigen soll, optional kein Text (der kann auch leer sein)
-title Text in der Titelzeile des Pop-ups, optional der Standardwert ist vom Betriebssystem abhängig
-type bestimmt den vordefinierten Satz von Schaltflächen der angezeigt werden sollen, optional abortretryignore, ok, okcancel, retrycancel, yesno, yesnocancel OK
Typ der messageBox Angebotene Buttons
abortretryignore Abbrechen, Wiederholen & Ignorieren
okOK
okcancelOK & Abbrechen
retrycancelWiederholen & Abbrechen
yesnoJa & Nein
yesnocancelJa, Nein & Abbrechen

Rückgabewerte

Die möglichen Rückgabewerte der messageBox richten sich nach den Buttons, die angeboten werden. Es muss folglich einer der folgenden Werte sein: yes, no, cancel, abort, retry oder ignore. Der Dialog ist sehr hartnäckig, ich habe es bisher nicht geschafft ihn anders als über einen der Buttons zu beenden. Da der Dialog zudem auch noch modal ist (man also in der Zwischenzeit nicht mit dem Rest der Applikation arbeiten kann), muss einer der Buttons betätigt werden.

Andere Werte für die Buttons sind nicht möglich - wer das braucht sollte sich z.B. Tk::Dialog ansehen.

Beispiel

#!perl

use strict;
use warnings;
use Tk;

my $mw = Tk::MainWindow->new();

my $button = $mw->Button(
	-text => "Do you like me?",
	-command => \&show_the_dialog,
)->pack(-side => 'left',);

my $label = $mw->Label(
	-text => 'I\'m not sure yet',
)->pack(-side => 'left',);

$mw->MainLoop();
exit(0);

sub show_the_dialog {
	my $answer = $mw->messageBox(
		-icon => 'question',
		-type => 'yesno',
		-title => 'Some Message',
		-message => 'Do you like me so far?',
	);
	$label->configure(-text => $answer);
} # /show_the_dialog
Top