需要PerlTk中的文本框帮助吗

需要PerlTk中的文本框帮助吗,perl,checkbox,model,tk,perltk,Perl,Checkbox,Model,Tk,Perltk,我需要在perlTk中设置一个文本框,这样我就可以输入带有自动添加分隔符的2位数字 例如,如果文本框中有5个两位数的条目,即52、25、69、45、15,如果我输入这5个两位数,则应在每个两位数条目后自动添加分隔符(-) 最后的条目看起来像 52 - 25 - 69 - 45 - 15 请不要让分隔符自动插入 这有点类似于下面的gif。 以下是一个示例,说明在输入小部件中按下键时如何注册要调用的回调。您可以使用此回调在需要时自动插入破折号 在这里,我使用该方法在小部件上注册按键事件,我还使用该方

我需要在perlTk中设置一个文本框,这样我就可以输入带有自动添加分隔符的2位数字

例如,如果文本框中有5个两位数的条目,即52、25、69、45、15,如果我输入这5个两位数,则应在每个两位数条目后自动添加分隔符(-)

最后的条目看起来像 52 - 25 - 69 - 45 - 15 请不要让分隔符自动插入

这有点类似于下面的gif。

以下是一个示例,说明在输入小部件中按下键时如何注册要调用的回调。您可以使用此回调在需要时自动插入破折号

在这里,我使用该方法在小部件上注册按键事件,我还使用该方法确保用户键入的字符不超过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', '-');
        }
    }
}
使用功能qw(比如说);
严格使用;
使用警告;
使用传统知识;
{
my$mw=main窗口->新建();
我的$label=$mw->label(
-text=>“输入序列号”,
-justify=>“左”
)->包装(-side=>top',-anchor=>w',-padx=>1,-pady=>1);
my$entry=$mw->entry(
-宽度=>14,
-状态=>“正常”,
-验证=>“密钥”,
-validatecommand=>sub{length($u0])包(
-侧面=>“底部”,
-anchor=>“w”,
-fill=>x',
-expand=>1,
);
$entry->bind(“”,sub{validate_entry($entry)});
主回路;
}
子项{
我的($entry)=@;
我的$cur=$entry->get();
my@fields=split“-”,$cur;
我的$last_field=pop@fields;
对于我的$field(@fields){
如果((长度$字段)!=2){
说“输入错误”;
返回;
}
}
my$num_fields=标量@字段;
如果($num_字段<4){
if(长度$last_字段==2){
$entry->insert('end','-');
}
}
}

您可以尝试使用为用户键入内容时要调用的
Tk::Entry
小部件指定回调。然后在
-invalidcommand
回调中,如果需要,您可以插入破折号。如果您能用一些示例进行解释,编辑将非常有用。