Обновление метки Tk с помощью Thread - PullRequest
0 голосов
/ 13 марта 2012
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;                        

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

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

Попробуйте этот код:

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 голосов
/ 13 марта 2012

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

...