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

War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top