0

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

所以我使用了 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');

但是当我运行这段代码时,我得到了这个错误:

无法自动加载“Tk::Frame::get”

我究竟做错了什么?

谢谢!

4

1 回答 1

2

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

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

5 月 16 日更新:您想要做什么:在窗口中输入文本,然后按执行?尝试这个:

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";
}
于 2016-05-15T13:38:37.630 回答