Perl Cd Bookshelf [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Perl Cd Bookshelf [Electronic resources] - نسخه متنی

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید



15.15. Creating Dialog Boxes with Tk


15.15.1. Problem




You want to create a dialog
box, i.e., a new top-level window with buttons to make the window go
away. The dialog box might also have other items, such as labels and
text entry widgets for creating a fill-out form. You could use such a
dialog box to collect registration information, and you want it to go
away when registration is sent or if the user chooses not to
register.

15.15.2. Solution


For simple jobs, use the Tk::DialogBox
widget:

use Tk::DialogBox;
$dialog = $main->DialogBox( -title => "Register This Program",
-buttons => [ "Register", "Cancel" ] );
# add widgets to the dialog box with $dialog->Add( )
# later, when you need to display the dialog box
$button = $dialog->Show( );
if ($button eq "Register") {
# ...
} elsif ($button eq "Cancel") {
# ...
} else {
# this shouldn't happen
}

15.15.3. Discussion


A DialogBox has two parts: the bottom is a set of buttons, and the
top has the widgets of your choosing. Show ing a
DialogBox pops it up and returns the button the user selected.

Example 15-6 contains a complete program
demonstrating the DialogBox.

Example 15-6. tksample3


#!/usr/bin/perl -w
# tksample3 - demonstrate dialog boxes
use Tk;
use Tk::DialogBox;
$main = MainWindow->new( );
$dialog = $main->DialogBox( -title => "Register",
-buttons => [ "Register", "Cancel" ],
);
# the top part of the dialog box will let people enter their names,
# with a Label as a prompt
$dialog->add("Label", -text => "Name")->pack( );
$entry = $dialog->add("Entry", -width => 35)->pack( );
# we bring up the dialog box with a button
$main->Button( -text => "Click Here For Registration Form",
-command => \&register) ->pack(-side => "left");
$main->Button( -text => "Quit",
-command => sub { exit } ) ->pack(-side => "left");
MainLoop;
#
# register
#
# Called to pop up the registration dialog box
#
sub register {
my $button;
my $done = 0;
do {
# show the dialog
$button = $dialog->Show;
# act based on what button they pushed
if ($button eq "Register") {
my $name = $entry->get;
if (defined($name) && length($name)) {
print "Welcome to the fold, $name\n";
$done = 1;
} else {
print "You didn't give me your name!\n";
}
} else {
print "Sorry you decided not to register.\n";
$done = 1;
}
} until $done;
}

The top part of this DialogBox has two widgets: a label and a text
entry. To collect more information from the user, we'd have more
labels and text entries.

A common use of dialog boxes is to display error messages or
warnings. The program in
Example 15-7 demonstrates
how to display Perl's warn function in a
DialogBox.

Example 15-7. tksample4


#!/usr/bin/perl -w
# tksample4 - popup dialog boxes for warnings
use Tk;
use Tk::DialogBox;
my $main;
# set up a warning handler that displays the warning in a Tk dialog box
BEGIN {
$SIG{_ _WARN_ _} = sub {
if (defined $main) {
my $dialog = $main->DialogBox( -title => "Warning",
-buttons => [ "Acknowledge" ]);
$dialog->add("Label", -text => $_[0])->pack;
$dialog->Show;
} else {
print STDOUT join("\n", @_), "n";
}
};
}
# your program goes here
$main = MainWindow->new( );
$main->Button( -text => "Make A Warning",
-command => \&make_warning) ->pack(-side => "left");
$main->Button( -text => "Quit",
-command => sub { exit } ) ->pack(-side => "left");
MainLoop;
# dummy subroutine to generate a warning
sub make_warning {
my $a;
my $b = 2 * $a;
}

15.15.4. See Also


The Tk::DialogBox manpage in the documentation for the Tk module from
CPAN; the menu(n) manpage (if you have it);
Mastering Perl/Tk



15.14. Creating Menus with Tk15.16. Responding to Tk Resize Events




Copyright © 2003 O'Reilly & Associates. All rights reserved.

/ 875