Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]5289[/thread]

WaitBox: WaitBox - wie erstelle ich einen..



<< >> 7 Einträge, 1 Seite
Gast Gast
 2007-02-06 20:11
#46182 #46182
hallo,

Ich moechte ein WaitBox waerend der ausfuehrung eines algrithmus zeigen lassen. (Alorithmus stell ein chart aus Daten einer Datei her)

ich habe zuerst mit Tk::WaitBox versucht - aber leider laeuft es nicht ganz einwandfrei unter windows. Das Problem ist -
das der WaitBox erst dann angezegt wird, wenn ich die eigenschaft von mein MainWindow  veraendere (z.bsp durch vergroessern). Ich weis auch genau wo im WaitBox.pm - das Skript haengenbleibt und zwar bei:

 $wd->tkwait('visibility', $wd);

im Funktion Show();

Nun versuche ich es ueber ein TopLevel Fenster. Da aber TopLevel Fenster gleich nach initialisierung aufpoppen, muss ich es mit der WITHDRAW funktion erst eliminieren um es wieder mit Popup() waehrend der ausfuerung des algorithmus zu oeffnen. Das problem ist aber dass es die Label (und andere elemente) nicht anzeigt. Und mit DEICONIFIED laeft der algorithmus nicht korrekt durch.

Hat jemand von euch schon mal ein WaitBox selbst programmiert. Ich waere fuer jede moeglich hinweise und codes dankbar. Wenn jemand Tk::WaitBox unter window zum laufen gebracht hat - bitte schreibt mir eure loesung

Danke im voraus
ptk
 2007-02-07 00:41
#46183 #46183
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Zeig mal deinen Versuch mit dem Toplevel. Ich wüsste nicht, warum es nicht gehen sollte. Natürlich muss man von Zeit zu Zeit update() aufrufen, falls man Änderungen an Tk-Elementen in einer Schleife durchführt, die nicht zur MainLoop() zurückkehrt.
hottdogg
 2007-02-07 16:51
#46184 #46184
User since
2007-02-07
2 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich mache eigentlich nichts grossartiges. Also der code sieht
ungefaehr so aus

use tk
..
.. (#mainWindow, Frames, Widest usw. initialisieren )
...

my $waitBox = $mainW->Toplevel(-title => "Please Wait... ");
$waitBox->Label(-text => "Generating Graph. Please Wait..." )->pack;
$waitBox->withdraw;

MainLoop;


im einer Funkion rufe ich dann das Toplevel mit:

$waitBox->Popup();

auf und in der letzen zu bearbeiteten funktion losche ich es
mit:

$waitBox->withdraw;

waehred dessen wird der Graph generiert. Das Fesnter poppt zwar auf, aber es wird nicht komplett gezeichnet d.h. man sieht nur die titelleiste und rest des frames (z. bsp. label) wird nicht angezeigt.\n\n

<!--EDIT|hottdogg|1170860019-->
GoodFella
 2007-02-07 17:57
#46185 #46185
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
Versuch mal $TopLevel->update(); oder $TopLvevel->idletasks();
PerlProfi
 2007-02-07 18:03
#46186 #46186
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Das liegt daran, dass du kein update() aufrufst.
Ausserdem würde ich deiconify() und raise() anstatt von Popup() benutzen.

Das hier funktioniert jedenfalls ganz gut:
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 strict;
use warnings 'all';
use Tk;

# MainWindow erstellen
my $mw = tkinit();

# WaitBox erstellen
my $wb = $mw->Toplevel(-title => "Please wait...");
$wb->Label(-text => "Generating Graph. Please wait.",
-font => '{Impact} 20 {bold}')->pack;
$wb->withdraw();

# WaitBox aufrufen
$mw->iconify();
$wb->deiconify();
$wb->raise();
$wb->update();

# Graph generieren
# ...
sleep 5;

# WaitBox verstecken
$wb->withdraw();
$mw->deiconify();

MainLoop;


MfG PerlProfi
hottdogg
 2007-02-09 17:33
#46187 #46187
User since
2007-02-07
2 Artikel
BenutzerIn
[default_avatar]
Hallo,

vielen Dank fuer die Loesungsvorschlaege und das Skript!

Ich werde es gleich asprobieren.

Mittlerweile habe ich auch eine Loesung zu dem Problem von
Tk::WaitBox unter Windows gefunden. Schaut hier rein, falls
Ihr damit arbeitet:

Probleme mit Tk::WaiBox unter windows

ich habe einfach die Zeile...

$cw->transient($cw->toplevel);

auskommentiert und es funktioniert\n\n

<!--EDIT|hottdogg|1171035243-->
ptk
 2007-02-09 22:16
#46188 #46188
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Vielleicht hast du auch Lust, neuer Maintainer von Tk::WaitBox zu werden ... :-)
<< >> 7 Einträge, 1 Seite



View all threads created 2007-02-06 20:11.