Tk::Checkbutton - Buttons zum ankreuzen

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.

Relevante Optionen für das Tk::Checkbutton-Widget

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.

Code-Beispiel für Checkbuttons

#!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
Top