2012-03-13 2 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 текст os не сползает вниз. Может ли кто-нибудь мне помочь?Обновление метки Tk с помощью Thread

+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

Thanx для ответа. Он работает, но я хочу выполнить какую-то другую работу в окне одновременно с движущейся меткой. Думаю, мне нужно используйте поток для этого. Можете ли вы помочь мне? – amit

+0

Использование потоков с Tk сложно. См. Обсуждение: [Perl Tk и Threads] (http://www.perlmonks.org/?node_id=732320) – Stamm

0

Я не думаю, что это когда-либо будет работать (с использованием Thread или threads).
place использует содержимое $x и не связывает переменную $x. Поэтому изменение переменной после первоначального размещения ничего не сделает с меткой.