将文本小部件中的所有单词输入到数组中

时间:2017-07-28 03:04:58

标签: perl perltk

我是Tk / Perl的新手。下面是我使用tk / perl创建的简单GUI界面。

GUI INTERFACE

以下是创建此GUI的代码的一部分。

$f2_label=$f_frame_top0->Label(-text=>"File",-font=>[-family=>'MS Sans Serif',-size=>9,-weight=>'bold',-underline=>0],-justify=>'left')->pack(-side=>'left',-anchor=>'w',-padx=>1,-pady=>1,);
$f2_entry=$f_frame_top0->Entry(-width=>50,-state=>"normal")->pack(-side=>'left',-anchor=>'w',-padx=>1,-pady=>1,-fill=>'x',-expand=>1);
$f2_file_btn=$f_frame_top0->Button(-text=>"...", -height=>1, -width=>2, -command=> [\&file_search,$tab2,$f2_entry,"TXT"])->pack(-side=>'left',-anchor=>'w',-padx=>1,-pady=>1);

$f3_label=$f_frame_top1->Label(-text=>"Number",-font=>[-family=>'MS Sans Serif',-size=>9,-weight=>'bold',-underline=>0],-justify=>'left')->pack(-side=>'left',-anchor=>'w',-padx=>1,-pady=>1,);
$f3_entry=$f_frame_top1->Text(-width=>10,-height=>10,-wrap=>'word',-state=>"normal")->pack(-side=>'left',-anchor=>'w',-padx=>1,-pady=>1,-fill=>'x',-expand=>1);


$but1_close=$f_frame_bot->Button(-text=>"Close",-command=>sub {destroy $mw}) ->pack(-side=>"right",-anchor=>'e',-padx=>1,-pady=>1);
$but1_exe=$f_frame_bot->Button(-text=>"Run",-command=>[\&fablot_fusesort,$f2_entry,$f3_entry] ) ->pack(-side=>"right",-anchor=>'e',-padx=>1,-pady=>1);

sub fablot_fusesort{
     my $file1 = shift -> get();
     my $number = shift ->get();
}

我想让数字用户输入Text(22,23,24,25,26)来处理我的子程序,但是我无法从shift中获取它 - >得到()。任何方式我可以让所有数字用户输入文本小部件?谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

get()对象的Tk::Text方法的正确语法在Tk::Text的文档中有所描述:

  

$text->get(index1, ?index2?)

     

从文本中返回一系列字符。返回值将是   文本中的所有字符都以索引所在的字符开头   index1并在索引为index2的那个之前结束   index2处的字符不会被退回)。如果省略index2则   返回index1处的单个字符。如果没有人物   在指定的范围内(例如index1超过文件的结尾或   index2小于或等于index1),然后是一个空字符串   返回

所以在没有参数的情况下使用get()是一个错误。

以下是如何获取文本的示例:

use strict;
use warnings;
use Tk;

my $mw = MainWindow->new(); 

my $entry = $mw->Text(
    -width=>20, -height => 10, -wrap => 'word', -state => "normal"
)->pack(
    -padx => 1, -pady => 1, -fill => 'x', -expand => 1
);

my $button = $mw->Button(
    -text => "Run",
    -command=> sub { fablot_fusesort($entry) }
)->pack(
    -padx => 1, -pady => 1
);

sub fablot_fusesort{
    my ( $entry) = @_;
    my $text = $entry->get('1.0','end'); # <-- Gets all the text in the widget
    print "$text";
}
MainLoop;