Schrift
[thread]4667[/thread]

$mw->update; Fensterrefresh: Schriftfarbe bleibt gleich



<< >> 5 Einträge, 1 Seite
I.C.Wiener
 2003-11-05 23:27
#44757 #44757
User since
2003-11-02
19 Artikel
BenutzerIn
[default_avatar]
Moin,

ich habe ein kleines Problem.
Das folgende Script soll alle 2 Minuten den Status des Seticlients abfragen und ausgeben.
Es funktioniert auch alles, bis auf die Schriftfarbe.( $bgcolor )
Sollte durch ein $mw->update; nicht das ganze MainWindow neu gezeichnet werden ?

MfG
PS: wenn es sonstiges an meinem Code zu beanstanden gibt, bin ich natürlich offen für alles :)

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/perl

use strict;
use warnings;
use Tk;

my ($dummy,$wu1,$wu2,$bgcolor,$status,$pid);
my $seti = '/home/fs/setiathome/';

&getvalues;

my $mw = MainWindow->new;
my $tk_wu1 = $mw->Label( -textvariable => \$wu1 );
my $tk_wu2 = $mw->Label( -textvariable => \$wu2 );
my $tk_status = $mw->Label( -foreground => "$bgcolor", -textvariable => \$status );

$tk_wu1->pack( );
$tk_wu2->pack( );
$tk_status->pack( );

$mw->repeat( 120000, \&refresh );
$mw->MainLoop( );
exit( 0 );

sub getvalues {
   open( STAT, '<', $seti.'user_info.sah' ) or die "!user_info.sah";
   while( <STAT> ) {
       chomp;
       if( /^nresults=.{3,4}/ ) {
           ($dummy,$wu1) = split( /\=/, $_ );
           $wu1 = "WU's $wu1";
       }
   }
   close STAT;
   open( STAT2, '<', $seti.'state.sah' ) or die "!state.sah";
   while( <STAT2> ) {
       chomp;
       if( /^prog=.*/ ) {
           ($dummy,$wu2) = split( /\=/, $_ );
           $wu2 = $wu2 * 100;
           $wu2 = sprintf( "%.1f", $wu2 );
           $wu2 = "WU $wu2\%";
       }
   }
   close STAT2;
   $bgcolor = 'darkred';
   $status = 'offline';
   open( PID, '<', $seti.'pid.sah' ) or die "pid.sah";
   while( <PID> ) {
       chomp;
       $pid = $_;
   }
   if( -e '/proc/'.$pid.'/stat' ) {
       open( STATUS, '<', '/proc/'.$pid.'/stat' ) or die "!/proc/$pid/stat";
       while( <STATUS> ) {
           chomp;
           if( /\(setiathome\)/ ) {
               $bgcolor = 'darkgreen';
               $status = 'online';
           }
       }
       close STATUS;
   }

}

sub refresh {
   &getvalues;
   $mw->update;
}
Solange du selbst redest, erfährst du nichts Neues
Dubu
 2003-11-06 15:31
#44758 #44758
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Statt
Code: (dl )
$bgcolor = 'darkred';

solltest du
Code: (dl )
$tk_status->configure( -foreground => 'darkred');

machen, entsprechend fuer 'darkgreen'.
Tk ist es ziemlich egal, ob du die Variable $bgcolor irgendwo im Skript noch aenderst.
Crian
 2003-11-06 15:48
#44759 #44759
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Bei manchen Eigenschaften (wie etwa Texten von Editfeldern u.a.m.) kann man Variablen an diese Binden, dann reicht es aus, die Variable umzudefinieren. In diesem Fall reicht das, wie Dubu schon sagte, nicht aus.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
I.C.Wiener
 2003-11-06 19:08
#44760 #44760
User since
2003-11-02
19 Artikel
BenutzerIn
[default_avatar]
Moin,

danke, so funktioniert es :)
Ich dachte, dass er beim neuzeichnen ($mw->update) die Werte der Variablen neu einließt.

MfG
Solange du selbst redest, erfährst du nichts Neues
Dubu
 2003-11-07 00:14
#44761 #44761
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Das hat an dieser Stelle gar nix mehr mit Variablen zu tun.

Zum Vergleich:
Code: (dl )
1
2
3
$x = 5;
$y = $x;
$x = 42;

So, welchen Wert hat jetzt $y?
Logischerweise 5, nicht 42, denn durch die Zuweisung $y = $x wird zwar der Wert uebertragen, aber keine "Verbindung" zwischen $y und $x geschaffen.
Genau so ist es bei einem Attribut wie -foreground => $bgcolor (die Anfuehrungszeichen sind hier wirklich ueberfluessig). Auch da wird nur der Wert von $bgcolor uebernommen.
Anders ist es bei -textvariable => \$status, denn hier wird eine Referenz auf die Variable $status uebergeben.
<< >> 5 Einträge, 1 Seite



View all threads created 2003-11-05 23:27.