Schrift
[thread]11152[/thread]

Daten werden an Dialog nicht zurückgegeben?

Leser: 1


<< >> 5 Einträge, 1 Seite
theresa
 2008-01-17 12:33
#104821 #104821
User since
2007-07-17
90 Artikel
BenutzerIn
[default_avatar]
Hallo!

Habe wieder mal so ein Problem...

Ich will Daten abfragen (alias, user, kennwort), dafür habe ich ein Fenster mit 3 Eingabefelder gemacht, die werden auch richtig zurückgegeben - Wenn die entsprechende Subroutine direkt aufgerufen wird, also der Teil der im Kode ganz oben auskommentiert ist
Code: (dl )
my @daten = eingabe();


Wenn aber ich ein Dialog dazwischenschalte (es muss erstmal bestätigt werden, dass das nächste fenster angezeigt werden soll), wird der Teil in eingabe() nach MainLoop nicht mehr ausgeführt...

Ehm... ja. Vielleicht überdeckt das MainLoop vom Dialog... das von meinem Eingabefenster... oder... keine Ahnung. Wäre sehr dankbar für jede Hilfe.

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
71
72
73
74
75
76
77
78
79
80
81
82
dialog($titel, $text);
#my @daten = eingabe();
#for(@daten){print $_};

sub dialog {

my @daten;

my $titel = shift;
my $text = shift;
my $mw = tkinit();

my $dialog = $mw->Dialog(-title => $titel,-text => $text, -bitmap => 'info', -font=>'courier 8', -buttons => ['Ja, jetzt', 'Später', 'Nein']);
$dialog->iconimage($bild);
$dialog-> transient('');
$mw->withdraw();
my $answer = $dialog->Show();

if($answer eq "Ja, jetzt"){

@daten = eingabe();

for(@daten){
print $_;
}
}

elsif ($answer eq "Später"){
}
#nein
else {
}
$dialog->destroy();
}

sub eingabe {

my @daten;
my $text = "Bitte geben Sie die Daten ein, die Ihnen vom * zugeteilt wurden.\n".
"(Beim Alias geht es um den Teil vor dem @,)";
my $mw = tkinit(-title=> '*');

my $fenster = $mw -> Frame(-padx=>"3m", -pady=>"3m") -> pack();

my $but_frame = $fenster->Component('Frame' => 'but_frame')->pack(-side=>'bottom');
my $ok_but = $but_frame -> Button(-text=>" Senden ", -command => sub{@daten = ok($mw, $fenster);}) -> pack(-side=>'left', -expand=>1);
my $sep_frame = $but_frame -> Frame(-width=>20) -> pack(-side=>'left', -expand=>1);
my $ab_but = $but_frame -> Button(-text=>" Abbrechen ", -command => sub{abbrechen($mw);}) -> pack(-side=>'right',-expand=>1);

my $lab_frame = $fenster -> Component('Frame' => 'lab_frame')->pack(-expand => 1, -fill => 'both', -side=>'left');
$lab_frame -> Label(-text => ' Alias:')->pack(-anchor => 'w', -anchor => 'center');
$lab_frame -> Label(-text=>' Username:')->pack(-anchor=>'w', -anchor => 'center');
$lab_frame -> Label(-text=>' Kennwort:')->pack(-anchor=>'w', -anchor => 'center');

my $alias_var = '';
my $user_var = '';
my $password_var = '';

my $dat_frame = $fenster -> Component ('Frame' => 'dat_frame')->pack(-expand=>1, -fill => 'both', -side=>'left');
my $alias = $dat_frame -> Component ('Entry' => 'alias', -textvariable => \$alias_var)->pack(-anchor => 'center');
$alias->focus();
my $user = $dat_frame -> Component ('Entry' => 'user', -textvariable => \$user_var)->pack(-anchor => 'center');
my $entry = $dat_frame ->Component('Entry' => 'password', -textvariable => \$password_var, -show => '*')->pack(-anchor => 'center');

$alias->bind('<Return>', sub{$user->focus();});
$user->bind('<Return>', sub{$entry->focus();});
$entry->bind('<Return>', sub{@daten = ok($mw, $fenster);});

MainLoop;
print "dies wird nicht angezeigt";
return @daten;

sub ok {
my $mw = shift;
my $fenster = shift;
my $alias = $fenster->Subwidget('dat_frame')->Subwidget('alias')->get();
my $user = $fenster->Subwidget('dat_frame')->Subwidget('user')->get();
my $pass = $fenster->Subwidget('dat_frame')->Subwidget('password')->get();
$mw -> destroy();
return ($alias, $user, $pass);
}
}
renee
 2008-01-17 12:38
#104823 #104823
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich würde Dir raten, ein Toplevel statt eines MainWindows zu nehmen und das MainLoop rausnehmen...
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/
theresa
 2008-01-17 13:12
#104824 #104824
User since
2007-07-17
90 Artikel
BenutzerIn
[default_avatar]
Kann ich denn ein TopLevel mit meinem Dialog erzeugen? In allen Beispielen, die ich bisher gesehen habe, wird es mit einem MainWindow erzeugt...

Will jetzt keine größen Änderungen, wenn möglich, am Skript machen, das Dialog vom Anfang würde ich gerne ungefähr so behalten, wie es jetzt ist.
renee
 2008-01-17 13:34
#104827 #104827
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mach ein (1!) Hauptfenster als MainWindow und den Rest über Toplevels und Dialoge...

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
my $mw = tkinit;

dialog( $mw, $titel, $text );

MainLoop;


sub dialog{
my ($mw,$title,$text) = @_;
my $dialog = $mw->Dialog(...);
# alles zum Dialog
if( $antwort eq 'yes' ){
my @daten = eingabe( $mw );
}
}

sub eingabe{
my ($mw) = @_;

my $top = $mw->Toplevel(...);
# alles was Du mit $mw gemacht hast, jetzt halt mit $top;
# und kein MainLoop mehr...
}
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/
theresa
 2008-01-17 14:52
#104832 #104832
User since
2007-07-17
90 Artikel
BenutzerIn
[default_avatar]
Jo jetzt hats geklappt, habs so geändert wie du gesagt hast... ein MainLoop musste allerdings doch in eingabe bleiben, denn ohne wurde nicht auf eingabe gewartet... sondern wurde die Liste sofort zurückgegeben, also leer.

Danke!
<< >> 5 Einträge, 1 Seite



View all threads created 2008-01-17 12:33.