【发布时间】:2013-10-17 10:39:08
【问题描述】:
我有一个 perl tk 例程从一个导入的 perl 模块调用一个过程。 GUI 在执行子例程时挂起。这是我正在使用的代码摘录。有人可以建议一种更好的方法来执行此操作,以便在程序运行时 GUI 处于活动状态?
use Tk;
use package1;
$mw = MainWindow->new;
$mw->geometry("+10+10");
$mw->title("My notebook GUI");
my $mwFrame = $mw->Frame(-borderwidth => 2, -relief => 'ridge')->pack(-fill=> 'none',-fil=> 'x');
my $nb = $mwFrame->NoteBook(-dynamicgeometry => 'true',-ipadx => 20, -ipady => 20)->pack(-expand => 1,-fill => 'both');
$page1 = $nb->add( 'Page1', -label => 'Page 1' );
$page2 = $nb->add( 'Page2', -label => 'Page 2' );
$page1->pack();
$page2->pack();
$button1 = $page1->Button(-text => "Not Selected", -background => 'gray', -state => 'disabled')->pack(-side => 'right', -expand => 0);
$button2 = $page2->Button(-text => "Not Selected", -background => 'gray', -state => 'disabled')->pack(-side => 'right', -expand => 0);
my $obj = package1->new();
my $obj->run();
在上面的代码中,我从 package1 中调用 run 过程来执行。虽然该过程需要一段时间,但 GUI 冻结,不允许我对其执行任何操作。我什至不能在笔记本 GUI 中从一页转到另一页。
有人可以指导我吗?我是 perl 新手。
谢谢。
【问题讨论】:
-
你能把
$mw->update;(或者不那么流行的$mw->idletasks;)塞进你的$obj里吗? Perlmonks 的这篇文章更好地解释了它perlmonks.org/?node_id=574002 -
我可以试试 $mw->update;在调用子例程后从我的主代码中。但它只在从程序返回后更新主窗口。另一种方法是能够从过程本身执行“$mw->update”。现在我将如何做到这一点?