我需要在 perlTk 中设置一个文本框,这样我就可以输入带有自动添加分隔符的 2 位数字。
例如。如果有 5 个两位数的条目,即 52、25、69、45、15,在文本框中如果我输入这五个 2 位数字,则分隔符 (-) 应在每两位输入后自动添加。
最后的条目看起来像 52 - 25 - 69 - 45 - 15 请不要自动插入分隔符。
这有点类似于下面的 gif。 在此处输入图像描述
这是一个示例,说明如何注册在条目小部件中按下键时要调用的回调。您可以在需要时使用此回调自动插入破折号。
在这里,我使用在小部件bind()
上注册按键事件的方法Tk::Entry
,我还使用-validatecommand
来确保用户输入的字符不超过 14 个:
use feature qw(say);
use strict;
use warnings;
use Tk;
{
my $mw = MainWindow->new();
my $label = $mw->Label(
-text => "Enter serial number",
-justify => 'left'
)->pack( -side => 'top', -anchor => 'w', -padx => 1, -pady =>1);
my $entry = $mw->Entry(
-width => 14,
-state => "normal",
-validate => "key",
-validatecommand => sub { length( $_[0] ) <= 14 ? 1 : 0 }
)->pack(
-side => 'bottom',
-anchor => 'w',
-fill => 'x',
-expand => 1,
);
$entry->bind( '<KeyPress>', sub { validate_entry( $entry ) } );
MainLoop;
}
sub validate_entry {
my ( $entry ) = @_;
my $cur = $entry->get();
my @fields = split "-", $cur;
my $last_field = pop @fields;
for my $field ( @fields ) {
if ( (length $field) != 2 ) {
say "Bad input";
return;
}
}
my $num_fields = scalar @fields;
if ( $num_fields < 4 ) {
if (length $last_field == 2 ) {
$entry->insert('end', '-');
}
}
}