2012-03-13 15 views
0
use Thread; 
use warnings; 
use Tk; 

my $x = 10; 
my $mw = new MainWindow; 
$mw->Label(-text => 'honeywell')->place(-x => $x, -y => 50); 
my $thr = new Thread \&sub1; 

sub sub1 { 
    for ($i = 0 ; $i < 20 ; $i++) { 
     $x += 20; 
     sleep(2);    
     $mw->update; 
    } 
} 

MainLoop;       

私は、テキストがダウンして表示されるようにラベルを更新しようとしています。私はthread.Butテキストdownsを使用して実装したいと思います。スレッドを使用してTkラベルを更新しています

+2

http://search.cpan.org/dist/perl/lib/Thread.pm#DEPRECATED: 'あなたは強く、新規に既存のスレッドコードを移行することをお勧めしますモデル(つまり、スレッドとスレッド::共有モジュールをできるだけ早く使用してください)。 – daxim

答えて

3

このコードを試してみてください。

use strict; 
use warnings; 

use Tk; 

my $x = 10; 

my $mw = new MainWindow; 
my $label = $mw->Label(-text => 'honeywell')->place(-x => $x, -y => 50); 

$mw->repeat(2000, \&sub1); 

sub sub1 { 
    return if $x >= 400; 
    $x += 20; 
    $label->place(-x => $x, -y => 50); 
    $mw->update; 
} 

MainLoop; 
+0

答えはありがたいです。それは動いていますが、移動中のラベルと同時に他の作業をウィンドウ内で実行したいと思います。このスレッドを使用してください。私を助けてもらえますか? – amit

+0

Tkでスレッドを使用するのは難しいです。このディスカッション[Perl Tk and Threads](http://www.perlmonks.org/?node_id=732320)を参照してください。 – Stamm

0

Threadまたはthreadsを使用して)これが動作するとは思われません。
placeは、$xの内容を使用し、変数$xにはバインドしません。したがって、最初の配置後に変数を変更しても、ラベルには何も行われません。

関連する問題