2016-05-23 14 views
2

私はperlでguiを通して継続的に実行する必要があるタスクがあります。perlのtkで繰り返しタスクを実行する

セットアップは、テキストフィールド、ボタン、テキストエリアで構成されています。ボタンを押すと、テキストフィールドの値がシステムコマンドによって繰り返し実行され、出力がテキスト領域に表示されます。

たとえば、次のコードを考えてみましょう。 use Tk;

# Main Window 
my $mw = new MainWindow; 

#GUI Building Area 
my $frm_name = $mw -> Frame(); 
my $lab = $frm_name -> Label(-text=>"Command"); 
my $ent = $frm_name -> Entry(); 

#Button and command 
my $ent = $mw -> Entry() -> pack(); 

my $but = $mw -> Button(-text=>"Run Command", -command =>\&push_button) -> pack(); 

#Text Area 
my $textarea = $mw -> Frame(); 
my $txt = $textarea -> Text(-width=>40, -height=>10) -> pack(); 

#Geometry Management 
$lab -> grid(-row=>1,-column=>1); 
$ent -> grid(-row=>2,-column=>1); 
$frm_name -> grid(-row=>1,-column=>1,-rowspan=>2); 


$but -> grid(-row=>1,-column=>1,-columnspan=>1); 

$txt -> grid(-row=>1,-column=>1); 
$textarea -> grid(-row=>5,-column=>1,-columnspan=>2); 

MainLoop; 


## Functions 
#This function will be executed when the button is pushed 

sub push_button { 
    my $name = $ent -> get(); 
    @out = qx($name); 
    $txt -> insert('end', @out); 
} 

さて、私が何をしたいのか、30秒毎またはそうPUSH_BUTTON()サブ実行されるようにそれを作るされ、テキストフィールドに出力します。

私はrepeat()関数を調べましたが、正しく実行できませんでした。どんな助けもありがとう。ありがとう。

答えて

5

Tk::afterを参照してください。例えば

push_button()実行30秒ごとに繰り返す:

$id = $widget->repeat(30 * 1000, \&push_button); 
関連する問題