【问题标题】:How do I call another Tk window without using a subwindow?如何在不使用子窗口的情况下调用另一个 Tk 窗口?
【发布时间】:2008-11-04 06:18:49
【问题描述】:

我正在制作 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");

【问题讨论】:

  • 这段代码很奇怪,因为你有这么多use和require语句。
  • 这只是程序的一部分。即使代码正在运行,我也遇到了小问题。我认为还有另一种方法可以调用我的主窗口(GUI)或者运行其他程序,而不是使用使代码太长的子窗口。所以这就是我问的原因?
  • “调用其他 GUI 窗口”是什么意思?窗口是一个小部件,而不是一个子程序。你可以与它交互,但你不能“调用”它。

标签: perl perltk


【解决方案1】:

您只需要单独的 MainWindows 吗?构建每个 MainWindow 后,您就可以构建各种小部件来引用正确的变量。这是一个简短的程序,在一个 MainWindow 中有一个按钮,在另一个 MainWindow 中有一个按钮按下计数器:

#!/usr/local/bin/perl 使用 Tk; # 另一个窗口作为自己的MainWindow # 显示按钮的次数 # 在另一个窗口被按下 我的 $other_window = MainWindow->new; $other_window->title("其他窗口"); 我的 $other_frame = $other_window->Frame->pack( -fill => '两者' ); 我的 $other_label = $other_frame->标签( -text => '按下 0 次', )->包装( -side => '顶部', -填充=>'x', ); # 登录窗口作为自己的MainWindow 我的 $login_window = MainWindow->new; $login_window->title("登录窗口"); 我的 $login_frame = $login_window->Frame->pack( -fill => '两者' ); 我的 $login_label = $login_frame->标签( -text => '按下按钮', )->包装( -side => '顶部', -填充=>'x', ); 我的 $pressed = 0; 我的 $login_button = $login_frame->Button( -text => '按钮', -command => sub { # 引用 $other_label $按下++; $other_label->configure(-text => "按下 $pressed 次"); }, )->包装( -side => '顶部', -fill => '两者', ); 主循环;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 2010-10-30
    • 2011-05-15
    • 2020-12-31
    • 1970-01-01
    • 2010-11-24
    相关资源
    最近更新 更多