Radiobuttons in Perl/Tk

Der Tk::Radiobutton ist ein Tk-Standardwidget zur Implementierung einer Einer-aus-vielen-Auswahl. Radiobuttons können Text oder Bilder beinhalten. Es ist möglich dem Ereignis, dass ein Button angeklickt wird, einen Callback zuzuordnen.

Radiobuttons können nur Text in einer einzelnen Schriftart anzeigen. Dafür kann der Text über mehrere Zeilen laufen. Außerdem ist es möglich einzelne Buchstaben zu unterstreichen. Das ist zum Beispiel hilfreich, um Tastaturkürzel darzustellen. Standardmäßig kann man mit der Tabulator-Taste zwischen den einzelnen Buttons wechseln.

Verwendung von Radiobutton-Widgets

Radiobuttons eignen sich zur Umsetzung von Multiple-Choice-Fragen. Sie sind ähnlich zu Checkboxen. Checkboxen erlauben jedoch auch eine Mehrfachauswahl (mit mehreren ausgewählten Werten).

Jede Gruppe von Radiobuttons sollte mit einer einzigen Variable assiziiert werden. Jeder Radiobutton repräsentiert dann einen möglichen Wert dieser Variable. Die Variale hat jeweils den Wert des aktuell ausgewählten Radiobuttons.

Tk Radiobutton

#!perl

use strict;
use warnings;
use utf8;
use Tk;
use Tk::Radiobutton;

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

my $selection_val = 2;

my $radio1 = $mw->Radiobutton(
	-text => 'Eins',
	-value => 1,
	-variable => \$selection_val,
)->pack(-anchor => 'w');

my $radio2 = $mw->Radiobutton(
	-text => 'Zwei',
	-value => 2,
	-variable => \$selection_val,
)->pack(-anchor => 'w');

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

Mit der Option -command kann ein Callback angegeben werden. Das ist Perl-Code der ausgeführt wird, wenn der Radiobutton angeklickt wird. Der Aufruft wird immer ausgeführt, auch wenn sich der Wert nicht ändert (z.B. wenn der Nutzer erneut auf din bereits ausgewählten Wert klickt).

Modi

Radiobuttons können mit einem kleinen Kreis dargestellt werden. Das selektierte Element hat einen Punkt im Kreis. Alternativ kann auf diesen Indikator aber verzichtet werden. Wird die Option -indicatoron auf den Wert 0 gesetzt, dann wird die Auswahl in Form von Buttons dargestellt.

Tk Radiobutton

Hier der dazugehörige Demo-Quelltext für das Radiobutton-Widget:

#!perl

use strict;
use warnings;
use utf8;
use Tk;
use Tk::Radiobutton;

# Ein neues Hauptfenster erzeugen:
my $mw = Tk::MainWindow->new(
	-width => 160,
	-height => 120,
);
$mw->packPropagate(0);

my $selection_val = 'Practical Extraction and Report Language';

$mw->Label(
	-text => 'Wähle deine Lieblings-Programmiersprache aus:'
)->pack(-fill => 'x');

my $radio1 = $mw->Radiobutton(
	-text => 'Perl',
	-value => 'Practical Extraction and Report Language',
	-variable => \$selection_val,
	-command => sub{ print 'Perl wurde ausgewählt.'; },
)->pack(-anchor => 'w');

my $radio2 = $mw->Radiobutton(
	-text => 'LISP',
	-value => 'List Processing',
	-variable => \$selection_val,
)->pack(-anchor => 'w');

my $radio3 = $mw->Radiobutton(
	-text => 'Prolog',
	-value => 'Programmation en Logique',
	-variable => \$selection_val,
)->pack(-anchor => 'w');

$mw->Frame(
	-borderwidth => 2,
	-height => 2, 
	-relief => 'raised',
)->pack(-fill => 'x', -padx => 5, -pady => 3);


my %languages = (
	Perl	=> 'Practical Extraction and Report Language',
	LISP	=> 'List Processing',
	Prolog	=> 'Programmation en Logique',
);
foreach my $name ( keys %languages ) {
	$mw->Radiobutton(
		-text => $name,
		-value => $languages{$name},
		-variable => \$selection_val,
		-indicatoron => 0,
	)->pack(-anchor => 'w', -fill => 'x');
}

# Tk-Eventloop starten:
$mw->MainLoop();
exit(0);
Top