1
我有一個Pertl Tk代碼,我想關閉主窗口並打開另一個窗口,但第一個窗口在第二個窗口打開後再次關閉時,第一個窗口也會出現。在Tk中銷燬Widget不工作
代碼
use strict;
use Tk;
my $mw;
#Calling the welcome_window sub
welcome_window();
sub welcome_window{
#GUI Building Area
$mw = new MainWindow;
my $frame_header = $mw->Frame();
my $header = $frame_header -> Label(-text=>"Molex Automation Tool");
$frame_header -> grid(-row=>1,-column=>1);
$header -> grid(-row=>1,-column=>1);
my $region_selected = qw/AME APN APS/;
my $frame_sub_header = $mw->Frame();
my $sub_header = $frame_sub_header -> Label(-text=>"Region Selection");
$frame_sub_header -> grid(-row=>2,-column=>1);
$sub_header -> grid(-row=>2,-column=>1);
my $frame_region = $mw->Frame();
my $label_region = $frame_region -> Label(-text=>"Region:");
my $region_options = $frame_region->Optionmenu(
-textvariable => \$region_selected,
-options => [@regions],
);
$frame_region -> grid(-row=>3,-column=>1);
$label_region -> grid(-row=>3,-column=>1);
$region_options -> grid(-row=>3,-column=>2);
my $frame_submit = $mw->Frame();
my $submit_button = $frame_submit->Button(-text => 'Go!',
-command => \&outside,
);
$frame_submit -> grid(-row=>4,-column=>1,-columnspan=>2);
$submit_button -> grid(-row=>4,-column=>1,-columnspan=>2);
MainLoop;
}
#This sub is just made to close the main window created in Welcome_Wiondow() sub and call the second_window()
sub outside{
$mw -> destroy;
sleep(5);
second_window();
}
sub second_window{
my $mw2 = new MainWindow;
my $frame_header2 = $mw2->Frame();
my $header2 = $frame_header2 -> Label(-text=>"Molex Automation Tool");
$frame_header2 -> grid(-row=>1,-column=>1);
$header2 -> grid(-row=>1,-column=>1);
my $frame_sub_header2 = $mw2->Frame();
my $sub_header2 = $frame_sub_header2 -> Label(-text=>"Tasks Region Wise");
$frame_sub_header2 -> grid(-row=>2,-column=>1);
$sub_header2 -> grid(-row=>2,-column=>1);
MainLoop;
}
我減少了代碼,並只放了相關線路。現在請讓我知道爲什麼我不能殺掉在sub outside()中的子welcome_window()中打開的主窗口。目前它在睡眠命令期間會關閉主窗口,但只要打開second_windows的主窗口,welcome_window的窗口也會再次出現。
得到了上面的代碼現在工作,邏輯 有一些問題,再次調用welcome_window。謝謝大家對你的 幫助。
我可以從這個withdaw功能工作主循環外的()?目前我無法做到這一點。 – Mohit
另外我還爲每個窗口分開了MainLoop?這是否有區別 – Mohit
我不明白第一個問題。嘗試提出一個新問題,而不是評論。你可能有兩個MainLoops和兩個不同的MainWindow,只要確保在第一個循環結束之前不要定義第二個。 – choroba