我想要的只是一个多行文字条目。
所以我使用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'
失败我做错了什么?
谢谢!
答案 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";
}