Schrift
[thread]4797[/thread]

global Grab



<< >> 6 Einträge, 1 Seite
bizza
 2004-07-01 10:58
#42286 #42286
User since
2004-03-16
6 Artikel
BenutzerIn
[default_avatar]
habe ein problem mit perl tk :/
hier ein programmausschnitt

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
use Tk;
$mw = MainWindow->new;
$mw->title("$title");
$f = $mw->Frame->pack(-side => 'bottom', -fill => 'x');
$f->Button(-text=>"Schliessen", -command => sub { exit; } )->
pack(-side => 'top');
$t = $mw->Scrolled("Text", -foreground => "$tcolor", -background => "$color",
-width => "$w", -height => "$h", -scrollbars=>'e' )
->pack (-side,'bottom', -fill => 'both', -expand => 1);
$mw->update;
$mw->grabGlobal;


das fenster nervt viertelstündlich user die ihre dateien nicht ordentlich archivieren :) in einem anderen skript mit welchem ich das fenster starte überprüfe ich erst ob der prozess des fesnsters läuft, wenn ja wird kein neues gesendet!! trotzdem bekomme ich jetzt ab und zu die meldung
Code: (dl )
grab failed: another application has grab at /usr/local/lib/perl5/site_perl/5.8.0/aix-thread-multi/Tk/Submethods.pm line 19.

kann mir evtl jemand weiterhelfen was die meldung bedeutet und was man dagegen machen kann??
Crian
 2004-07-02 17:22
#42287 #42287
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Hast Du mal in Zeile 19 des betreffenden Files nachgesehen?

Andererseits könnte es ja sein, dass auf dem betreffenden Rechner dann gerade eine andere Applikation den grab hat?!


Ganz andere Frage: Warum willst Du die Benutzer zu ihrem Glück zwingen?
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
Gast Gast
 2004-07-02 17:58
#42288 #42288
hmm, hier ist ein auszug aus dem file
da ich vorher ja überprüfe ob der prozess läuft kann nur ein anderer prozess den grap hat :/ kann man das auch überpüfen??

sub import
+7 {
+8 my $class = shift;
+9 no strict 'refs';
+10 my $package = caller(0);
+11 while (@_)
+12 {
+13 my $fn = shift;
+14 my $sm = shift;
+15 foreach my $sub (@{$sm})
+16 {
+17 my ($suffix) = $sub =~ /(\w+)$/;
+18 my $pfn = $package.'::'.$fn;
+19 *{$pfn."\u$suffix"} = sub { shift->$pfn($sub,@_) };
+20 }
+21 }
+22 }

die user werden mit dem netten fenster belohnt da sie über 600 modelle nicht archivieren die schon älter wie ein halbes jahr sind naja und bevor wir weitere festplatten kaufen, erfreuen wir unsere user mit so nem tollen fenster :) ist doch llieb oder?
ptk
 2004-07-02 19:14
#42289 #42289
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Evtl. kannst du den Fehler in einem eval-Block abfangen und dann nur ein local grab mit raise machen.
bizza
 2004-07-02 19:46
#42290 #42290
User since
2004-03-16
6 Artikel
BenutzerIn
[default_avatar]
öhhm was ist ein eval block?? ist das fenster dann trotzdem im vordergrund und er kann nichts anderes tun als scrollen und ok drücken??
ptk
 2004-07-02 20:22
#42291 #42291
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Damit meine ich, dass man mit
Code: (dl )
1
2
3
4
5
6
eval {
$mw->grabGlobal;
};
if ($@) {
... Fehlerbehandlung ...
}
wenigstens den Fehler abfangen kann. Ein global grab wird z.B. gemacht, wenn ein Benutzer gerade eine Menueauswahl taetigt. Es waere etwas benutzerunfreundlich, wenn diese Aktion von anderer Seite abgebrochen werden wuerde, und meines Wissens geht das auch nicht, jedenfalls nicht mit Tk-Mitteln. Du koenntest aber in kurzen Intervallen erneut versuchen, einen grabGlobal zu machen.
<< >> 6 Einträge, 1 Seite



View all threads created 2004-07-01 10:58.