Widgets zur Auswahl eines Datums

Soll in einer Perl/Tk-GUI ein Datum eingegeben werden, so kann man an Stelle eines einfachen Entry-Widgets auch spezifischere Widgets verwenden. Diese erlauben es z.B. direkt das eingegebene Datum auf Gültigkeit zu prüfen oder sie verhindern direkt, dass ein ungültiges Datum ausgewählt wird. Gerne verwendet wird z.B. ein Pop-Up-Kalender, der wie ein jQuery-Datepicker aussieht. Also ein kleiner Kalender, in dem der Nutzer den Monat per Button wechseln und einen Tag auswählen kann.

Es gibt einige gute und einige weniger gute Widgets, die durch Perl/Tk verfügbar gemacht wurden. Weniger gut in dem Sinne, dass sie beispielsweise vom Funktionsumfang her eingeschränkt sind. Einschränkungen können das Datumformat, die Zeitspanne möglicher Daten oder den Benutzerkomfort betreffen. Dennoch sollen auch die nicht-so-tollen Widgets hier aufgeführt werden, damit man sie mal gesehen hat und sich bewusst dagegen entscheiden kann.

Folgende Widgets werden betrachtet:


Tk::MiniCalendar


Vorteile

Kleiner Kalender für Perl/Tk

#!perl

use strict;
use warnings;
use Tk;
use Tk::MiniCalendar;

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

my $frm1 = $mw->Frame->pack;  # Frame to place MiniCalendar in

my $minical = $frm1->MiniCalendar->pack;

my $frm2 = $mw->Frame->pack;  # Frame for Ok Button
my $b_ok = $frm2->Button(
	-text => "Ok",
	-command => sub {
	  my ($year, $month, $day) = $minical->date();
	  print "Selected date: $year/$month/$day\n";
	  exit;
	},
)->pack();

$mw->MainLoop();

Tk::DateEntry


Nachteile

Datum mit Perl/Tk auswählen - Tk::ChooseDate Widget

#!perl

use strict;
use warnings;

use Tk;
use Tk::DateEntry;
 
my $mw = tkinit;

my $dateentry = $mw->DateEntry(
	-weekstart	=> 1,
	-daynames	=> [qw/So Mo Di Mi Do Fr Sa/],
	-parsecmd	=> sub {
		my ($d,$m,$y) = ($_[0] =~ m/(\d*)\/(\d*)-(\d*)/);
		return ($y,$m,$d);
	},
	-dateformat => 4,
)->pack;

$mw->MainLoop;

exit(0);

Tk::ChooseDate


Vorteile

Nachteile

Datum mit Perl/Tk auswählen - Tk::ChooseDate Widget

#!perl

use strict;
use warnings;

use Tk;
use Tk::ChooseDate;
 
my $mw = tkinit;

my $date = undef;

$mw->ChooseDate(
	-textvariable	=> \$date,
	-command		=> sub{print "$date\n"},
	-language		=> 'German',
)->pack(-fill => 'x');

$mw->MainLoop;

exit(0);

Tk::Month


Vorteile

Nachteile

Datum mit Perl/Tk auswählen - Tk::Month-Widget

#!perl

use strict;
use warnings;
use Tk;
use Tk::Month;

my $mw = Tk::MainWindow->new(-title => "Tk::Month v$Tk::Month::VERSION");

my $parent = $mw->Frame()->pack(
	-fill => 'both',
	-expand => 1,
);

#If you want your code to be portable, your format ("fmt")
#argument should use only the conversion specifiers defined by
#the ANSI C standard (C89, to play safe).  These are
#"aAbBcdHIjmMpSUwWxXyYZ%".

my $m = $parent->Month(
	-month          => 'July',
	-year           => '2013',
	-dayformat      => '%d',
	-printformat	=> '%d %B %Y %a',
	-title          => "%Y-%m-%d",
	-navigation     => 1,
	-includeall     => 0,
	-showall        => 0,
	-first          => 1,
)->pack();


$mw->MainLoop();

exit(0);

Tk::DatePick

Tk::DatePick ist kein Aufklapp-Kalender, sondern eine Kombination aus Entry-Widget und Buttons. Es gibt je ein Button-Paar zum ändern des Jahres, des Monats und des Tages. Der Vorteil besteht darin, dass keine ungültige Datumseingabe erfolgen kann. Nachteilig ist jedoch, dass es sehr lange dauern kann, bis man sich sein Datum zurecht geklickt hat.

Vorteile

Nachteile

Tk::DatePick zur Auswahl eines Datums über Buttons

#!perl

use strict;
use warnings;

use Tk;
use Tk::DatePick;

my $mw = tkinit;

my $datepick = $mw->DatePick()->pack();
my $currentdate = $datepick->cget('-text');

$mw->MainLoop;

exit(0);

Tk::Date


Vorteile

Nachteile

Komplexes Eingabefeld für Daten - Tk::Date

#!perl

use strict;
use warnings;
use utf8;
use Tk;
use Tk::Date;

my $mw = tkinit(-title => 'Tk::Date');

my $date_widget = $mw->Date(
	-datefmt => '%2d.%2m.%4y',
	-fields => 'date',
	-value => 'now',
)->pack();

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