2017-07-28 3 views
0

Je suis nouveau à Tk/Perl. Voici l'interface graphique simple que je crée en utilisant tk/perl.Obtenez tout le mot entrer dans le widget texte à un tableau

GUI INTERFACE

est Ci-dessous une partie du code créer cette interface graphique.

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

Je veux obtenir l'utilisateur: entrez le numéro dans le texte (le 22,23,24,25,26) pour traiter dans mon sous-programme, mais je ne peut pas l'obtenir de changement -> get(). D'une manière ou d'une autre, je peux obtenir tout le numéro d'utilisateur entré dans le widget de texte? Merci de nous aider

+0

Qu'en est-'my $ numValue = $ f3_entry-> get();' donc vous pouvez les déplacer à un tableau .... – ssr1012

+0

@ ssr1012 quand j'utilise le faire apparaître ce message d'erreur "mauvais # args: devrait être" .notebook.sheet_3.frame1.text obtenir index1? index2 " – Tim

+0

pourriez-vous s'il vous plaît mettre à jour votre question avec un échantillon minimal fichier perl pour compiler le script – ssr1012

Répondre

1

La syntaxe correcte pour la méthode get() sur un objet Tk::Text est décrit dans la documentation Tk::Text:

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

Retour une gamme de caractères du texte. La valeur renvoyée sera tous les caractères dans le texte commençant par celui dont l'index est index1 et se terminant juste avant celui dont l'index est index2 (le caractère à index2 ne sera pas retourné). Si index2 est omis alors le caractère unique à index1 est renvoyé. S'il n'y a pas de caractères dans la plage spécifiée (par exemple index1 est passé à la fin du fichier ou index2 est inférieur ou égal à index1) alors une chaîne vide est retourné

Donc, en utilisant get() sans argument est une erreur

Voici un exemple de la façon d'obtenir le texte:

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; 
+0

Merci, je peux obtenir le mot mais je ne sais pas pourquoi quand j'imprime le $ test je montre cette erreur à la place "Utilisation de la valeur non initialisée dans la concaténation (.) Ou la chaîne à la ligne 218. – Tim

+0

Great. Pouvez-vous montrer comment vous imprimez? Si '$ test' est vide (' undef'), vous obtiendrez cette erreur ... –