perl tk text:无法将文本内容转换为变量

时间:2016-05-15 12:29:36

标签: perl text tk tkentry

我想要的只是一个多行文字条目。

所以我使用TK :: Text而不是TK :: Entry。

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');

但是当我运行此代码时,我收到此错误:

AUTOLOAD'Tk :: Frame :: get'

失败

我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

$ mw-> MainLoop()设置一个循环,等待来自鼠标,键盘,计时器和您使用的任何其他事件。 $ desc->获得(' 1.0&#39);退出应用程序之前不会执行。您可以将其移到上方,这将解决您提出的问题。

但是,您真正的问题是将文本放入例如Entry()并在您的应用程序中使用它。查看一个很好的教程,例如http://docstore.mik.ua/orelly/perl3/tk/ch05_02.htm

更新5月16日:你想做什么:在窗口中输入文字然后按Go?试试这个:

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";
}