Domanda

"Come undersand l'uso POE-Tk di distruggere?" , nel tentativo di ridurre il bug nel mio codice di produzione per un banco di prova. Ma sembra che la soluzione al caso di test non funziona nel programma completo.

Il programma è di 800 linee lunghe quindi sono restii a pubblicarlo per intero. Mi rendo conto che i frammenti che fornisco qui possono essere troppo breve per essere di qualche utilità, ma spero di ottenere qualche direzione in entrambi dove cercare una soluzione o quali informazioni aggiuntive posso fornire.

Questa è la sessione :: Create sezione del mio 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 è chiamato qui;


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 crea il widget di Toplevel $ mucchio -> {} 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 );
    ...
}

Premendo $ ih_but1 risultati in questo;

C:\scripts\alias\resource>alias_poe_V-3_0_par.pl

premuto il pulsante add

sub validate chiamato

! valido inserito

ih_mw esiste in validate

ih_button_1 premuto

ih_mw non esiste in ih_button_1_press

Così il widget di $heap->{ih_mw} sembra essere sconosciuta alla ih_button_1_press subroutine anonima, anche con l'inserimento di "($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP];"

È stato utile?

Soluzione

Da dove viene $ mucchio in &, convalida viene? Non si passa come parametro. Potrebbe $ heap in & validare e $ mucchio in & in_button_1_press non essere la stessa cosa? Hai provato la stampa sotto forma filante di $ mucchio per vedere se gli indirizzi sono gli stessi nelle due funzioni?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top