私の生産コードのバグをテストケースに減らすために、 "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,
);
...
}
validateは、トップレベルウィジェット$ 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)の両方が実際に定義されているかどうかを確認してください()。 $ヒープが定義されていない場合、あなたは以前の投稿と同じ問題を抱えている可能性があります。 – Inshallah
if(defined($ heap))をif(Tk :: Exists($ heap - > {ih_mw}))の前に追加しました。 $ヒープが定義されたことが戻ってきました。 押しih_button_1は... ヒープが定義されている... ih_mwがih_button_1_pressに存在しない ... – jpolache
何については、定義された($ヒープ - > {} ih_mw)? – Inshallah