Ich postete "How to undersand the POE-Tk use of destroy?" in einem Versuch, den Fehler in meinem Produktionscode zu einem Testfall zu reduzieren. Aber es scheint, dass die Lösung für den Testfall nicht im vollen Programm funktioniert.Namespaces in POE-Tk verstehen
Das Programm ist 800+ Zeilen lang, so dass ich zögere, es vollständig zu posten. Ich bin mir bewusst, dass die hier bereitgestellten Ausschnitte vielleicht zu kurz sind, um nützlich zu sein, aber ich hoffe, dass ich eine Richtung finde, wo ich nach einer Lösung suchen kann oder welche zusätzlichen Informationen ich bereitstellen kann.
Hier ist der Abschnitt Session :: Create meiner POE-Tk App.
POE::Session->create(
inline_states => {
_start => \&ui_start,
get_zone => \&get_zone,
ping => \&ping,
mk_disable => \&mk_disable,
mk_active => \&mk_active,
pop_up_add => \&pop_up_add,
add_button_press => sub {
my ($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP];
print "\nadd button pressed\n\n";
&validate;
},
ih_button_1_press => sub {
my ($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP];
print "\nih_button_1 pressed\n\n";
if(Tk::Exists($heap->{ih_mw})) {
print "\n\nih_mw exists in ih_button_1_press\n\n";
} else {
print "\n\nih_mw does not exist in ih_button_1_press\n\n";
}
1;
$heap->{ih_mw}->destroy if Tk::Exists($heap->{ih_mw});
&auth;
},
pop_up_del => \&pop_up_del,
auth => \&auth,
# validate => \&validate,
auth_routine => \&auth_routine,
raise_widget => \&raise_widget,
del_action => \&del_action,
over => sub { exit; }
}
);
add_button_press
heißt hier;
sub pop_up_add {
...
my $add_but_2 = $add_frm_2->Button(
-text => "Add Record",
-command => $session->postback("add_button_press"),
-font => "{Arial} 12 {bold}") -> pack(
-anchor => 'c',
-pady => 6,
);
...
}
Validate schafft die Toplevel-Widget $ heap -> {ih_mw};
sub validate {
...
if(! $valid) {
print "\n! valid entered\n\n";
$heap->{label_text} .= "Add record anyway?";
my $lt_ref = \$heap->{label_text};
...
my $heap->{ih_mw} = $heap->{add_mw}->Toplevel(-title => "ih_mw");
...
if(Tk::Exists($heap->{ih_mw})) {
print "\n\nih_mw exists in validate\n\n";
} else {
print "\n\nih_mw does not exist in validate\n\n";
}
...
my $ih_but1 = $heap->{ih_mw}->Button(-text => "Add",
-font => 'vfont',
-command => $session->postback("ih_button_1_press"),
)->pack(-pady => 5);
...
}
Drücken von $ ih_but1 führt dazu;
C:\scripts\alias\resource>alias_poe_V-3_0_par.pl
Add-Taste gedrückt
Unter Validate
genannt! gültig eingegeben
ih_mw
in validate
ih_button_1
gedrückt
ih_mw
existiert nicht in ih_button_1_press
Also das $heap->{ih_mw}
Widget scheint zu sein, unkown zum ih_button_1_press
anonymen Unterprogramm auch mit der Aufnahme von "($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP];
existiert "
Bitte versuchen Sie festzustellen, ob sowohl $ heap als auch $ heap -> {ih_mw) tatsächlich definiert sind(). Wenn $ heap nicht definiert ist, können Sie möglicherweise das gleiche Problem wie in Ihrem vorherigen Post haben. – Inshallah
Ich habe ein if (definiert ($ heap)) vor dem if (Tk :: Exists ($ heap -> {ih_mw})) hinzugefügt. Es kam zurück, dass $ Heap definiert ist. ih_button_1 gedrückt ... Haufen definiert ... ih_mw nicht in ih_button_1_press existiert ... – jpolache
Was definiert ($ heap -> {ih_mw})? – Inshallah