Schrift
[thread]4829[/thread]

Scrolled Text - Label die 2.: Scrolled Text - Label die 2.



<< >> 5 Einträge, 1 Seite
ahnungsloser
 2004-08-24 22:01
#42589 #42589
User since
2003-09-03
80 Artikel
BenutzerIn
[default_avatar]
Hi,

hatte shconmal vor nicht allzu langer Zeit, hier gepostet und superb weitergeholfen bekommen, anbei nochmals an alle ein recht herzliches Danke. Nun hab ich mit dem selben Teil immer noch so meine Problemchen, ich lasse aus einem Array, die verschiedensten Hosts pingen, das funzht auf der Shell(Linux) ganz opk und dank einer foreach schleife wird das auch wundervoll auf der shell dargestellt, host für host. Wenn ich das ganze nu mit der TK Oberfläche kreuze, wird immer nur der letzte Eintrag, aus dem Array angezeigt, bzw. gescrolled???? und da is der hund begraben.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/perl
use Tk;

$MW = MainWindow->new(-title => "Reach-Ticker by Dataabbel");
$MW->resizable(0,0);
$MW->geometry("300x30+10+20");
$MW->repeat(90, \&tick);
$LabelW = $MW->Label(-textvariable => "")->pack(-expand => 1, -fill => 'x'); # leeres label erzeugen

@data = qw (www.petra-hille.de www.google.de www.yahoo.de www.perl-community.de);

foreach $host (@data) {
$| = 1;
@pin = `ping -c 1 $host`;

if ($pin[4] =~ /received/) {
chomp ($host);
$text = $host . " received ";
$LabelW->configure(-textvariable => ""); # sollte das Label vorsichtshalber löschen, glaube unsinnig
$LabelW->configure(-textvariable => \$text); # hier sollte nu der aktuelle host stehen,steht aber nur letztes element aus @data
}
}

MainLoop;
sub tick {
$width = $LabelW->cget('width');
return unless $width < length $text;
$text = substr($text,1,length($text)-1) . substr($text,0,1);

}

Eigentlich wollte ich das ganze ja noch so aufpeppen, sollte eben der host nich "up" sein, dass ein extra fenster samt Sound losheult usw.
renee
 2004-08-25 10:21
#42590 #42590
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Es werden zuerst die ganzen Pings gemacht, und dann wird erst der Ticker geöffnet... Da Du den Text immer auf den "aktuellen" Host änderst - und ganz zum Schluss ist pc.de der aktuelle host, siehst du immer nur pc.de...

Wenn Du alle sehen willst, hast Du zwei Möglichkeiten:

1.)  Hier siehst Du alle hosts im Ticker!
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/perl
use Tk;

$MW = MainWindow->new(-title => "Reach-Ticker by Dataabbel");
$MW->resizable(0,0);
$MW->geometry("300x30+10+20");
$MW->repeat(90, \&tick);        
$LabelW = $MW->Label(-textvariable => "")->pack(-expand => 1, -fill => 'x'); # leeres label erzeugen

   @data = qw (www.petra-hille.de www.google.de www.yahoo.de www.perl-community.de);

   foreach $host (@data) {
   $| = 1;
   @pin = `ping -c 1 $host`;

   if ($pin[4] =~ /received/) {
   chomp ($host);
   $text .=  $host . " received ";
   $LabelW->configure(-textvariable => ""); # sollte das Label vorsichtshalber löschen, glaube unsinnig
   $LabelW->configure(-textvariable => \$text); # hier sollte nu der aktuelle host stehen,steht aber nur letztes element aus @data
   }
   }

MainLoop;    
sub tick {
 $width = $LabelW->cget('width');
 return unless $width < length $text;
 $text = substr($text,1,length($text)-1) . substr($text,0,1);
 
}


2.) - allerdings nicht als Ticker; einfach mal ausprobieren -
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/perl
use Tk;
use strict;
use warnings;

my $mw = MainWindow->new(-title => "Reach-Ticker by Dataabbel");
$mw->resizable(0,0);
$mw->geometry("300x30+10+20");
my $label_w = $mw->Label(-textvariable => "")->pack(-expand => 1, -fill => 'x'); # leeres label erzeugen
my $i = 0;
my $text;
($text) = $mw->repeat(900, \&ping);


MainLoop;

sub ping{
 my @data = qw (www.petra-hille.de www.google.de www.yahoo.de www.perl-community.de);
 my $text;
 my @pin = `ping -c 1 $data[$i]`;

 if ($pin[4] =~ /received/) {
   $text =  $data[$i] . " received ";
   $label_w->configure(-textvariable => \$text);
 }
 $i = -1 if $i == $#data;
 $i++;
 return ($text);
}


Benutze bitte use strict; und use warnings;!\n\n

<!--EDIT|renee|1093424276-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ptk
 2004-08-25 12:51
#42591 #42591
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Da fehlt
Code: (dl )
$MW->update
. Aenderungen an der GUI werden nur ausgefuehrt, wenn man sich in der MainLoop befindet (also gar nichts macht) oder wenn explizit update() oder idletasks() oder DoOneEvent() aufgerufen wird.
ahnungsloser
 2004-08-26 10:38
#42592 #42592
User since
2003-09-03
80 Artikel
BenutzerIn
[default_avatar]
Hi,

@renee Jo, das funzt soweit, nur mit dem Tickern is halt nich weit her. Irgendwie sollte ich das ganze glaub ich nochmal überdenken.
$MW->update;
Hat bei mir gar nix bewirkt??
ptk
 2004-08-26 14:41
#42593 #42593
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Wo hast du das $MW->update eingefuegt? Es sollte innerhalb der Schleife nach den ->configure-Aufrufen stehen.
<< >> 5 Einträge, 1 Seite



View all threads created 2004-08-24 22:01.