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

Unterfenster aus Schleife heraus starten



<< >> 10 Einträge, 1 Seite
rol_wir
 2006-10-11 12:31
#45871 #45871
User since
2005-12-20
11 Artikel
BenutzerIn
[default_avatar]
Hallo,
hab iein blödes Problem:
Vom main-Fenster aus möchte ich eine Schleife aufrufen, die Dateien synchronisiert. Sollte dort eine Nutzerentscheidung notwendig werden, möchte ich ein neues Fenster öffnen, um den Nutzer zu fragen.
Leider läuft aber die Schleife im Hintergrund weiter und wartet nicht auf das Beenden des Unterfensters. Kann man das irgendwie hinbekommen?

Grüsse+Dank im voraus
Roland
renee
 2006-10-11 12:35
#45872 #45872
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zeig mal, wie Du das machst...
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/
renee
 2006-10-11 12:40
#45873 #45873
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Vielleicht hilft Dir CPAN:Tk::Dialog weiter:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#! /usr/bin/perl
use strict;
use warnings;
use Tk;
use Tk::Dialog;
my $mw = MainWindow->new();
my $text = 'Save all your changes before exit?';
my $dialog = $mw->Dialog(-title => 'Test',
-text => $text,
-bitmap => "question",
-default_button => 'ok',
-buttons => ['cancel','ok']);

for(0..3){
print $_,": ";
my $entscheidung = $dialog->Show();
print $entscheidung,"\n";
}
MainLoop;


Mehr ist im Wiki:Artikel zu finden...
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/
rol_wir
 2006-10-11 12:59
#45874 #45874
User since
2005-12-20
11 Artikel
BenutzerIn
[default_avatar]
Hallo Renee

main:
Code: (dl )
1
2
3
4
5
6
...
my $mbut3 =$lab->Button(-text => " Synchronisieren ", -state=>$stat,
-command => sub{
&doitnow;})
-> pack(-side=>'left', -ipady => '3p',-padx => '5p', -pady => '1p');
...


im sub doitnow:
Code: (dl )
1
2
3
4
5
6
7
8
9
for ($fori=0;$fori<1000000;$fori++)
{
...
elsif (!exists $listage{$gs[$fori]} )
{
&decision($info);
}
...
}


decision ist das submain:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sub decision
{

&ini_sm;
$ssm->geometry('=+400+200');
$ssm->title("Nutzerentscheidung notwendig");

# Anfang Inhalte des Fensters
my $text_codes = $ssm->Label ( -text=>"Wie soll mit folgender Datei verfahren werden?" , -anchor=>'w', -justify=>'left'
)
->grid(
-row => 0,
-sticky => 'nw',
-column => 0,
-columnspan => 99);
...

Da Unterfenester decision geht auch auf, aber &doitnow arbeitet einfach weiter. Ich bräauchte so eine Art "wait"-Funktion, die auf das Ende von &decision wartet.

Gruss
Roland

ps. Jou, Nähe Darmstadt, aber auch wieder nicht wirklich nah
renee
 2006-10-11 14:55
#45875 #45875
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wie gesagt, arbeite am Besten mit CPAN:Tk::Dialog. Das wartet dann auch...

nur mal ein paar Anmerkungen, die nichts mit dem Problem zu tun haben:

Aus
Code: (dl )
1
2
                                -command => sub{
&doitnow;})


sollte
Code: (dl )
                                -command => \&doitnow)

werden.

Die Schleife solltest Du so schreiben:
Code: (dl )
1
2
3
4
5
6
7
8
9
for my $fori(0 .. 999999)
{
...
elsif (!exists $listage{$gs[$fori]} )
{
decision($info);
}
...
}


Du übergibst einen Parameter an die sub decision, rufst ihn dort aber nicht ab. Du scheinst auch nicht mit Wiki:[tt]use strict[/tt] zu arbeiten - solltest Du aber.
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
 2006-10-11 23:32
#45876 #45876
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Oder $mw->messageBox(...) statt Tk::Dialog. Wird Tk::Dialog unter Windows eigentlich als nativer Dialog angezeigt? Ich glaube, mit messageBox ist man näher dran...
ptk
 2006-10-11 23:38
#45877 #45877
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=renee,11.10.2006, 12:55]Aus
Code: (dl )
1
2
                                -command => sub{
&doitnow;})


sollte
Code: (dl )
                                -command => \&doitnow)

werden.[/quote]
Nicht unbedingt, außer dass man nicht &code, sondern code() schreiben sollte. Die sub { code() }-Schreibweise hat den Vorteil, dass es mit einem Application-Reload besser funktioniert.
rol_wir
 2006-10-12 13:48
#45878 #45878
User since
2005-12-20
11 Artikel
BenutzerIn
[default_avatar]
Na gut,
nochmal zum Thema:

ich werds wohl so lösen:

Sub &doitnow wird beendet,wenn Unterfenster aufgerufen wird:
Code: (dl )
1
2
3
4
5
 elsif (!exists $listage{$gs[$fori]} )
{
decision($info); # Fenster mit Abfrage
return(); # Sub beenden
}


und &doitnow neu aufrufen, wenn Unterfenster verlassen wird:
Code: (dl )
1
2
3
4
5
6
7
my $but_use_ziel =$ssm_b->Button    (-text => $html{22} . " nach " .$html{20},
-command =>
sub{
...
&doitnow;
&end_sm;
}


Dazu muss &doitnow merken, dass es bereits aufgerufen wurde und dann die Shleife ab dieser Stelle weiter abarbeiten.
Gefällt mir nicht so gut, scheint aber zu funktionieren...

Grüsse
Roland
ptk
 2006-10-12 22:33
#45879 #45879
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Warum benutzt du nicht Tk::Dialog oder Tk::DialogBox, wie bereits vorgeschlagen? Eine weitere Möglichkeit wäre waitVariable.
rol_wir
 2006-10-17 11:17
#45880 #45880
User since
2005-12-20
11 Artikel
BenutzerIn
[default_avatar]
Hi
stimmt, Dialogbox könnte für meine Belange auch funktionieren, ab die Möglichekiten gerade mal kurz angeschaut.

Dank+Grüsse
Roland
<< >> 10 Einträge, 1 Seite



View all threads created 2006-10-11 12:31.