Pergunta

"Como undersand o uso POE-Tk de destruir?" em uma tentativa de reduzir o erro na minha código de produção para um caso de teste. Mas parece que a solução para o caso de teste não está funcionando no programa completo.

O programa é 800 + linhas longas, por isso estou hesitante em publicá-la na íntegra. Eu percebo que os trechos que eu forneço aqui pode ser demasiado curto para ser de alguma utilidade, mas espero conseguir algum sentido em qualquer onde procurar uma solução ou que informação adicional que pode proporcionar.

Aqui está o Session :: Criar seção do meu aplicativo POE-Tk.


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 é chamado aqui;


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,
        );
    ...
}

Validar cria a Toplevel Widget $ montão -> {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 );
    ...
}

Pressionando $ ih_but1 resultados neste;

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

botão add pressionado

sub validar chamado

! entrou válida

ih_mw existe na validação

ih_button_1 pressionado

ih_mw não existe no ih_button_1_press

Assim, o $heap->{ih_mw} Widget parece ser desconhecida para a sub-rotina anônima ih_button_1_press mesmo com a inclusão de "($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP];"

Foi útil?

Solução

Onde $ montão no & validar vem? Você não passá-lo como um parâmetro. Poderia $ montão no & validar e US $ montão no & in_button_1_press não ser a mesma coisa? Você já tentou imprimir o formulário stringy de US $ pilha para ver se os endereços são os mesmos nas duas funções?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top