Das Verständnis Namensräume in POE-Tk
Frage
I geschrieben: „Wie die POE-Tk Verwendung zerstören, um under?“ in einem Versuch, den Fehler in zu reduzieren meinem Produktionscode zu einem Testfall. Aber es scheint, dass die Lösung für den Testfall ist nicht im vollen Programm zu arbeiten.
Das Programm ist 800+ Zeilen lang so bin ich zögerlich um es in voller zu posten. Ich stelle fest, dass die Schnipsel ich hier bieten kann zu kurz sein, von Nutzen zu sein, aber ich hoffe, eine Richtung zu bekommen entweder, wo nach einer Lösung zu suchen oder welche zusätzlichen Informationen, die ich zur Verfügung stellen kann.
Hier ist die Session :: Abschnitt meines POE-Tk App erstellen.
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
hier genannt wird;
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 erstellt das 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 );
...
}
Durch Drücken von $ ih_but1 Ergebnisse in dieser;
C:\scripts\alias\resource>alias_poe_V-3_0_par.pl
hinzufügen Taste gedrückt
Unter Validate genannt
! gültig eintritt
ih_mw
existiert in validate
ih_button_1
gedrückt
ih_mw
existiert nicht in ih_button_1_press
Also das $heap->{ih_mw}
Widget scheint mit der Aufnahme von „ih_button_1_press
“ den ($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP];
anonymen Subroutine auch unkown zu sein
Lösung
Wo $ heap in & validate kommen? Sie geben es nicht als Parameter. Könnte Haufen $ in & validieren und $ heap in & in_button_1_press nicht dasselbe sein? Haben Sie versucht, die sehnig Form von $ Heap-Druck, wenn die Adressen der gleiche in den beiden Funktionen sind zu sehen?