Вземете цялата дума, въведена в текстовия модул, в масив

Нов съм в Tk/Perl. По-долу е простият GUI интерфейс, който създавам с tk/perl.

GUI ИНТЕРФЕЙС

По-долу е част от кода за създаване на този 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 -> get(). Някакъв начин мога да получа всички номера, въведени от потребителя в Text Widget? Благодаря за помощта


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