perl tk - 如何在执行perl模块中的过程时保持GUI处于活动状态

时间:2013-10-17 10:39:08

标签: perl user-interface tk perltk perl-package

我有一个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中从一个页面转到另一个页面。

有人可以指导我吗?我是个新手。

感谢。

2 个答案:

答案 0 :(得分:5)

欢迎来到并发编程的世界。一般而言,这里有三种主要方法:

  1. 线程
  2. 叉/管
  3. 合作多任务/事件循环
  4. 每个人都有利弊。

    这是使用线程方法的one example;我认为这对你有用。

答案 1 :(得分:0)

除了一些基本的东西,我对自己并不太熟练,但为什么你想在那个地方运行那个Sub?通常情况下,我会假设您需要一些按钮或其他UI元素来使用某种-command => {$obj->run()}启动子例程。 但是,无论如何应该从主程序中分叉执行。但是,如果不知道run()$obj是什么,很难说是否可以将它们与主循环并行运行。