如何在不使用子窗口的情况下调用另一个 Tk 窗口?

发布于 2024-07-08 12:10:28 字数 1145 浏览 10 评论 0原文

我正在制作 GUI(登录窗口)。 当密码正确时,登录窗口必须调用其他窗口。 PerlTk 有没有办法调用另一个窗口而不是使用子窗口?

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");

I am making GUI (login window). When the password is correct, the login window must call other window. Is there a way in PerlTk to call another window rather than using subwindow?

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");

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

給妳壹絲溫柔 2024-07-15 12:10:28

您只想要单独的 MainWindows 吗? 一旦构建了每个主窗口,就构建了各种小部件来引用正确的变量。 这是一个简短的程序,其中一个主窗口中有一个按钮,另一个主窗口中有一个按钮按下计数器:

#!/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;

Do you just want separate MainWindows? Once you construct each MainWindow, you construct the various widgets to reference the right variables. Here's a short program that has a button in one MainWindow and a button-press counter in the other 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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文