2008-11-04 1 views
2

Я делаю GUI (окно входа в систему). Когда пароль верен, окно входа в систему должно вызывать другое окно. Есть ли способ в PerlTk вызвать другое окно, а не использовать subwindow?Как я могу назвать другое окно Tk без использования поднабора?

use strict; 

use Tk; 

my $mw = MainWindow->new; 
$mw->geometry("300x150"); 
$mw->configure(-background=>'gray',-foreground=>'red'); 
$mw->title("PLEASE LOGIN"); 

my $main_frame=$mw->Frame(
    -background=>"gray",-relief=>"ridge",)->pack(-side=>'top',-fill=>'x'); 
my $left_frame=$main_frame->Frame(
    -background=>"gray")->pack(-side=>'left',-fill=>'x'); 
my $bottom_frame1=$mw->Frame(
    -background=>"gray")->pack(-side=>'bottom',-fill=>'x'); 
my $right_frame1=$mw->Frame(
    -background=>"gray")->pack(-side=>'left',-fill=>'x'); 


my $button=$bottom_frame1->Button(-text=>"OK",-command=>\&push_button); 
$button->pack(-side=>'left'); 
my $cancel=$bottom_frame1->Button(-text=>"CANCEL",-command=>sub{$mw->destroy}); 
$cancel->pack(-side=>'right'); 
my $entry2=$mw->Entry(-width=>20,-relief=>"ridge")->place(-x=>100,-y=>75); 

sub push_button{ 
    ... 
    } 

my $mw=MainWindow->new; 
$mw->geometry("900x690"); 
+0

Этот код очень странно, потому что у вас так много использования и требуют утверждения. – 2008-11-04 06:56:47

ответ

1

Вы просто хотите разделить MainWindows? После создания каждого MainWindow вы создаете различные виджеты для ссылки на правильные переменные. Вот короткая программа, которая имеет кнопку в одном MainWindow и кнопка-пресс счетчик в другой MainWindow:

 
#!/usr/local/bin/perl 

use Tk; 

# The other window as its own MainWindow 
# It will show the number of times the button 
# in the other window is pressed 
my $other_window = MainWindow->new; 
$other_window->title("Other Window"); 
my $other_frame = $other_window->Frame->pack(
    -fill => 'both' 
    ); 

my $other_label = $other_frame->Label(
    -text => 'Pressed 0 times', 
    )->pack(
     -side => 'top', 
     -fill => 'x', 
    ); 

# The login window as its own MainWindow 
my $login_window = MainWindow->new; 
$login_window->title("Login Window"); 
my $login_frame = $login_window->Frame->pack(
    -fill => 'both' 
    ); 


my $login_label = $login_frame->Label(
    -text => 'Press the button', 
    )->pack(
     -side => 'top', 
     -fill => 'x', 
    ); 


my $pressed = 0; 
my $login_button = $login_frame->Button(
    -text => 'Button', 
    -command => sub { # references $other_label 
     $pressed++; 
     $other_label->configure(-text => "Pressed $pressed times"); 
     }, 
    )->pack(
     -side => 'top', 
     -fill => 'both', 
    ); 


MainLoop;