게시판에 버그를 줄이기 위해 "How to undersand the POE-Tk use of destroy?"을 게시했습니다. 그러나 테스트 케이스에 대한 해결책이 전체 프로그램에서 작동하지 않는 것 같습니다.POE-Tk의 네임 스페이스 이해
프로그램의 길이가 800 줄 이상이므로 전적으로 게시하는 것을 주저합니다. 여기서 제공하는 스 니펫은 사용하기에 너무 짧을 수도 있지만, 솔루션을 찾을 곳이나 제공 할 수있는 추가 정보에 대해 어느 정도 방향을 잡기를 바랍니다.
다음은 POE-Tk 앱의 Session :: Create 섹션입니다.
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
이 여기에 호출됩니다.
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,
);
...
}
유효성 검사는 상위 레벨 위젯 $ 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);
...
}
$ ih_but1을 누르면 결과가 나타납니다.
C:\scripts\alias\resource>alias_poe_V-3_0_par.pl
추가 버튼을
라고
서브 유효성 검사를 누르면! 유효은
ih_mw
$heap->{ih_mw}
위젯도
($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP];
을 "의 포함으로
ih_button_1_press
익명 서브 루틴에 알 수없는 것 같다
ih_button_1_press
에 존재하지 않는
ih_mw
을 누르면
ih_button_1
유효성에 존재 입력 "
$ heap과 $ heap -> {ih_mw)가 실제로 정의되어 있는지 확인해보십시오(). $ heap이 정의되지 않은 경우 이전 게시물과 동일한 문제가 발생할 수 있습니다. – Inshallah
if (정의 ($ heap))를 if (Tk :: Exists ($ heap -> {ih_mw})) 앞에 추가했습니다. $ heap이 정의 된 것을 다시금 알게되었습니다. 누르면 ih_button_1은 ... 힙이 정의 ... ih_mw이 ih_button_1_press에 존재하지 않는 ... – jpolache
무엇에 대한 정의 ($ 힙 -> {ih_mw})? – Inshallah