如何在Perl / Tk中关闭窗口?

时间:2010-05-27 12:27:29

标签: perl tk

在我的Perl / Tk脚本中,我打开了两个窗口。单击特定按钮后,我想关闭其中一个。我怎样才能做到这一点?这是我到目前为止所做的:

$main = new MainWindow;
$sidebar = $main->Frame(-relief => "raised", 
                        -borderwidth => 2)
                ->pack (-side=>"left" ,
                        -anchor => "nw", 
                        -fill   => "y");
$Button1 = $sidebar -> Button (-text=>"Open\nNetlist", 
                               -command=>  \&GUI_OPEN_NETLIST) 
                    ->pack(-fill=>"x");
MainLoop;

sub GUI_OPEN_NETLIST
{
    $component_dialog = new MainWindow;
    $Button = $component_dialog -> Button (-text=>"Open\nNetlist", 
                                           -command=>  **close new window**) 
                                ->pack(-fill=>"x"); 
    MainLoop;
}

1 个答案:

答案 0 :(得分:2)

简单的方法是在按钮$component_dialog->destroy回调中调用-command。这样做的缺点是,如果您想稍后重新显示窗口,则必须重新创建它。 withdraw方法将隐藏窗口而不会破坏它,以便您可以在以后需要时重新显示它。按下按钮可以节省一些时间。当按下其中一个按钮时,类DialogDialogBox会自动为您执行此操作。如果你需要一个像传统对话框一样的窗口,他们可以选择一个更简单的选项来构建你自己的窗口。

除了在特殊情况下,您不需要多次拨打MainLoop。当您的回调GUI_OPEN_NETLIST返回MainLoop将恢复时,显式调用MainLoop可能会导致稍后的奇怪错误。

我认为这接近你所寻求的,我没有测试过。

use strict;
use warnings;

my $main = new MainWindow;
my $sidebar = $main->Frame(-relief => "raised", 
                        -borderwidth => 2)
                ->pack (-side=>"left" ,
                        -anchor => "nw", 
                        -fill   => "y");
my $Button1 = $sidebar -> Button (-text=>"Open\nNetlist", 
                               -command=>  \&GUI_OPEN_NETLIST) 
                    ->pack(-fill=>"x");
my $component_dialog = $main->Dialog( -buttons => [ 'Close' ], );

MainLoop;

sub GUI_OPEN_NETLIST
{
    $component_dialog->Show();
}

如果您不想要对话框,则应考虑是否要创建第二个MainWindow或根据现有Toplevel创建MainWindow窗口。 当Toplevel关闭时MainWindow将自动关闭,而另一个MainWindow关闭后,MainWindow将保持打开状态。