Das Checkbutton-Widget (manchmal auch Checkbox genannt) werden verwendet, um Benutzern eine binäre Auswahl anzubieten: an oder aus. Ähnlich zum Modul Tk::Checkbutton bieten auch folgende Widgets diese Funktionalität: Tk::Checkbox und Tk::FlatCheckbox.
Checkbuttons können Text oder Bilder beinhalten. Wird auf den Checkbutton gedrückt, kann ein hinterlegter Callback ausgeführt werden.
Mit der Option -indicatoron
kann der Checkbutton in einen Toggle-Button umgewandelt werden. Der Status wird dann gewechselt, wenn man auf den Button klickt.
Option | Beschreibung |
---|---|
-command |
Ein Callback, der ausgeführt wird, wenn der Status der Checkbox geändert wird (angekreuzt oder nicht angekreuzt). |
-indicatoron |
Definiert ob die viereckige Box gezeigt werden soll oder ob die Auswahl als Push-Button dargestellt werden soll. |
-onvalue |
Definiert, welcher Wert als Bedeutung für einen angehakten Checkbutton hinterlegt werden soll. Standardmäßig ist das 1 . |
-offvalue |
Definiert den Wert der von einem nicht-angehakten Checkbutton repräsentiert wird. Standardmäßig ist das 0 . |
-text |
Gibt den Text an, der neben dem Indikator (der eigentlichen Box) steht. Wenn kein Indikator angezeigt wird (per Option -indicatoron => 0 ), dann erscheint der Text im Push-Button. |
-variable |
Der Wert des Checkbuttons wird irgendwo gespeichert. Man kann eine Variablenreferenz angeben, die dafür verwendet wird. Wenn keine Variablenreferenz angegeben wird, dann wird $checkbutton_objekt->{'Value'} verwendet. Die Option -variable kann entsprechend immer ausgelesen werden. |
|
#!perl
use strict;
use warnings;
use Tk;
use Tk::Labelframe;
my $mw = tkinit();
my $lf = $mw->Labelframe(
-text => 'Numerus:',
)->pack(-fill => 'both', -expand => 1,);
my $num_displ = $mw->Label(
-text => '',
)->pack(-fill => 'x',);
my $sg = $lf->Checkbutton(
-text => 'Singular',
-command => sub{ update_numerus_display($num_displ); },
)->pack();
my $pl = $lf->Checkbutton(
-text => 'Plural',
-command => sub{ update_numerus_display($num_displ); },
)->pack();
$mw->MainLoop();
exit(0);
sub update_numerus_display {
my $label = shift or die('Missing Label');
# get the kind of numerus
my $num = $Tk::widget->cget('-text');
# get the status of the checkbutton
my $status = $Tk::widget->cget('-variable');
# get the textual content of the label widget
my $text = $label->cget('-text');
if ( $$status ) {
# numerus was slected
unless( $text =~ m/$num/ ) {
if( $text eq '' ) {
$text = $num;
}else{
$text .= ' & ' . $num;
}
}
}else{
# numerus was de-selected
$text =~ s~(?: & )?$num(?: & )?~~;
}
# set label to new text
$label->configure(-text => $text);
return;
} # /update_numerus_display