Hallo Kean,
Tk::Spinbox hat einen eingebauten Mechanismus zum Prüfen, der ist glaube ich von
Tk::Entry geerbt (das Eingabefeld ist schließlich ein solches). Das kannst du nutzen. Anbei ein Beispiel. Es ist allerdings sehr restriktiv und quasi fast schon eine Garantie für Benutzer-Frust :)
Ich glaube schöner wäre es, die Nutzereingabe nicht zu ignorieren, sondern in irgend etwas umzuwandeln, was Sinn macht. Z.B. bei der Eingabe 12f oder 12,5 die Zahl 12.
Grüße, pktm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#perl
use strict;
use warnings;
use utf8;
use Tk;
use Tk::Spinbox;
use Data::Dumper qw/Dumper/;
my $mw = tkinit();
my $sb = $mw->Spinbox(
-text => 1,
-validate => 'all',
-validatecommand => sub{
my $input = shift;
print "Eingabe = '$input'\n";
if( $input !~ m/^\d+$/ || $input < 0 || $input > 23 ) {
return 0;
}
return 1;
},
-invalidcommand => sub{
print "Falsche Engabe, muss Ganzzahl zwischen 0 und 23 sein (24 gibt es nicht :-p)\n";
}
)->pack();
$mw->Button(
-text => 'exit',
-command => sub{
print "Inhalt der Spinbox: '" . $sb->get() . "'\n";
}
)->pack();
$mw->MainLoop();