Получить все слова, вводимые в текстовом виджете, в массив

Я новичок в Tk/Perl. Ниже представлен простой графический интерфейс, который я создаю с помощью tk/perl.

ГРАФИЧЕСКИЙ ИНТЕРФЕЙС

Ниже приведена часть кода для создания этого графического интерфейса.

$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();
}

Я хочу, чтобы пользователь ввел число в тексте (22,23,24,25,26) для обработки в моей подпрограмме, но я не могу получить его из shift -> get(). В любом случае я могу получить все числа, которые пользователь вводит в текстовом виджете? Спасибо за помощь


person Tim    schedule 28.07.2017    source источник
comment
как насчет my $numValue = $f3_entry->get();, чтобы вы могли переместить их в массив....   -  person ssr1012    schedule 28.07.2017
comment
@ ssr1012, когда я использую get it, отображается это сообщение об ошибке неправильно # args: должно быть .notebook.sheet_3.frame1.text get index1 ?index2   -  person Tim    schedule 28.07.2017
comment
не могли бы вы обновить свой вопрос с минимальным образцом файла perl для компиляции скрипта   -  person ssr1012    schedule 28.07.2017


Ответы (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;
person Håkon Hægland    schedule 28.07.2017
comment
Спасибо, я могу получить слово, но я не уверен, почему, когда я печатаю $test, я показываю эту ошибку вместо использования неинициализированного значения в конкатенации (.) или строки в строке 218. - person Tim; 28.07.2017
comment
Здорово. Можете показать, как вы печатаете? Если $test пусто (undef), вы получите эту ошибку... - person Håkon Hægland; 28.07.2017