2016-05-15 3 views
0

bekommen Ich wollte nur eine mehrzeilige Texteingabe.perl tk text: kann keinen Textinhalt in die Variable

Also habe ich TK :: Text anstelle von TK :: Entry verwendet.

use Tk; 

my $mw = MainWindow->new(-width => '1000', -relief => 'flat', 
    -height => '840', -title => 'Test', -background => 'white',);  
$mw->geometry("1000x840+200+200"); 

my $desc = $mw->Scrolled('Text', -scrollbars => 'e', 
    -width => 50, -height => 3)->place(-x => 10, -y => 170); 

my $goButton = $mw->Button(-pady => '1', -relief => 'raised', 
    -padx => '1', -state => 'normal', -justify => 'center', 
    -text => 'Go', -width => 15, -height => 1, 
    -command => sub {$mw->destroy;})->place(-x => 12, -y => 770); 

my $cancelButton = $mw->Button(-pady => '1', -relief => 'raised', 
    -padx => '1', -state => 'normal', -justify => 'center', 
    -text => 'Cancel', -width => 8, -height => 1, 
    -command => sub { exit 0; })->place(-x => 140, -y => 770); 

$mw -> MainLoop(); 

print $desc->get('1.0'); 

Aber wenn ich diesen Code ausführen, bekomme ich diesen Fehler:

automatisch zu laden fehlgeschlagen 'Tk :: Rahmen :: get'

Was mache ich falsch?

Danke!

Antwort

2

$ mw-> MainLoop() erstellt eine Schleife, die auf Ereignisse von Maus, Tastatur, Timer und was Sie sonst noch verwenden, wartet. $ desc-> get ('1.0'); wird erst ausgeführt, wenn Sie die Anwendung beenden. Sie können es oben verschieben und das wird das Problem lösen, das Sie fragen.

Ihr wirkliches Problem ist jedoch, den Text zum Beispiel in Entry() zu bekommen und in Ihrer Anwendung zu verwenden. Schauen Sie sich ein gutes Tutorial an, wie zum Beispiel http://docstore.mik.ua/orelly/perl3/tk/ch05_02.htm.

UPDATE 16 Mai: Was möchten Sie tun: Text in das Fenster eingeben und dann Go drücken? Versuchen Sie folgendes:

use strict; 
use warnings; 
use Tk; 

my $mw = MainWindow->new(-width => '1000', -relief => 'flat', 
    -height => '840', -title => 'Test', -background => 'white',); 
$mw->geometry("1000x840+200+200"); 

my $desc = $mw->Text(-width => 50, -height => 3)->place(-x => 10, -y => 170); 

my $goButton = $mw->Button(-pady => '1', -relief => 'raised', 
    -padx => '1', -state => 'normal', -justify => 'center', 
    -text => 'Go', -width => 15, -height => 1, 
    -command => sub {\&fromGo($desc) })->place(-x => 12, -y => 770); 
my $cancelButton = $mw->Button(-pady => '1', -relief => 'raised', 
    -padx => '1', -state => 'normal', -justify => 'center', 
    -text => 'Cancel', -width => 8, -height => 1, 
    -command => sub { exit 0; })->place(-x => 140, -y => 770); 
$mw->MainLoop(); 


sub fromGo 
{ 
    my($desc) = @_; 
    my $txt = $desc->get('1.0', 'end-1c'); 
    print "$txt\n"; 
} 
+0

wenn ich den Druck vor dem mainloop bewegen, wird es Leerzeile drucken ... Ich verstehe nicht ... –

+0

auch Eintrag nicht mehrere Zeilen verarbeiten kann ... –

+0

Für mehrzeiligen Eintrag : Ja, benutze Text(), aber lies bitte das Tutorial für Text in zum Beispiel das Buch, mit dem ich verlinkt habe und gib es dein Bestes. Das Buch ist ausgezeichnet. – Jorgen

Verwandte Themen