在子例程中实现时,Perl Tk无法从MainLoop返回

时间:2016-03-23 01:08:15

标签: perl listbox tk

我使用以下代码显示列表并从用户获取所选条目的数组。

#!/mu/bin/perl

use Tk; use strict; use warnings;
my @selections; 
my @choices = ("choice1", "choice2", "choice3", "choice4", "choice5", "choice6", "choice7", "choice8");

my $mw = MainWindow->new(-title=>"ListBox");
$mw->Label(-text => 'Select your choices')->pack();

my $lb = $mw->Listbox(-selectmode => 'extended');
$lb->insert('end', sort @choices);$lb->pack();
$mw->Button(-text => 'Select',
                   -command => sub {@selections = $lb->curselection;$mw->destroy;})->pack();
MainLoop;

foreach (@selections) {
    print $_."\n";
}

此代码可以自行运行,单击按钮后,我可以在MainLoop;之后执行打印语句。但是,当我在我的程序中调用的子例程中使用此代码(当然没有前3行)时,单击该按钮仅关闭GUI窗口,不执行MainLoop;语句下面的任何内容。当子程序卡在MainLoop中时,整个程序就会挂起。

对我可能做错了什么的任何建议,我该如何解决这个问题?感谢。

0 个答案:

没有答案