Object +-- Widget +-- Editable +-- Entry
Le widget entrée permet de taper du texte dans une boîte d'une seule ligne. Le texte peut être placé avec des appels de fonctions qui déterminent si le nouveau texte doit remplacer, se placer devant ou après le contenu actuel du widget entrée.
Il existe deux fonctions pour créer des widgets entrée :
$entry = new Gtk::Entry(); $entry = new Gtk::Entry( $max_length );
La première crée juste un nouveau widget entrée alors que le second crée le widget et déclare une longueur limite pour le texte.
Il existe plusieurs fonctions qui modifient le texte contenu dans le widget Entrée :
$entry->set_text( $text ); $entry->append_text( $text ); $entry->prepend_text( $text );
La fonction set_text() déclare le contenu du widget Entrée remplaçant
le contenu présent. Les fonctions append_text() et prepend_text()
permettent de placer du texte après ou avant le contenu du widget.
Si vous utilisez une Entrée et que vous ne voulez pas que le texte entré soit visible, par exemple quand vous entrer un mot de passe, vous pouvez utiliser la fonction suivante qui prend une valeur vraie ou fausse:
$entry->set_visibility( $visible );
Si nous voulons attraper le moment ou l'utilisateur a rentré du texte, nous
pouvons connecter un signal 'activate' ou 'changed'.
'activate' se manifeste quand l'utilisateur appuie sur la touche ``Entrée''
à l'intérieur du widget.
'changed' se manifeste quand le texte change, pour chaque caractère entré
ou effacé.
#!/usr/bin/perl -wuse Gtk;
use strict;
init Gtk;
my $false = 0;
my $true = 1;
my $window;
my $vbox;
my $hbox;
my $entry;
my $button;
my $check;
$window = new Gtk::Window( "toplevel" );
$window->set_usize( 200, 100 );
$window->set_title( "GTK Entry" );
$window->signal_connect( "delete_event", sub { Gtk->exit( 0 ); } );
$vbox = new Gtk::VBox( $false, 0 );
$window->add( $vbox );
$vbox->show();
$entry = new Gtk::Entry( 50 );
$entry->signal_connect( "activate", \&enter_callback, $entry );
$entry->set_text( "Hello" );
$entry->append_text( "World" );
$entry->select_region( 0, length( $entry->get_text() ) );
$vbox->pack_start( $entry, $true, $true, 0 );
$entry->show();
$hbox = new Gtk::HBox( $false, 0 );
$vbox->add( $hbox );
$hbox->show();
$check = new Gtk::CheckButton( "Editable" );
$hbox->pack_start( $check, $true, $true, 0 );
$check->signal_connect( "toggled", \&entry_toggle_editable, $entry );
$check->set_active( $true );
$check->show();
$check = new Gtk::CheckButton( "Visible" );
$hbox->pack_start( $check, $true, $true, 0 );
$check->signal_connect( "toggled", \&entry_toggle_visibility, $entry );
$check->set_active( $true );
$check->show();
$button = new Gtk::Button( "Close" );
$button->signal_connect( "clicked", sub { Gtk->exit( 0 ); } );
$vbox->pack_start( $button, $true, $true, 0 );
$button->can_default( $true );
$button->grab_default();
$button->show();
$window->show();
main Gtk;
exit( 0 );
### Subroutines
sub enter_callback { my ( $widget, $entry ) = @_; my $entry_text = $entry->get_text(); print( "Entry contents: $entry_text\n" ); }
sub entry_toggle_editable { my ( $checkbutton, $entry ) = @_; $entry->set_editable( $checkbutton->active ); }
sub entry_toggle_visibility { my ( $checkbutton, $entry ) = @_; $entry->set_visibility( $checkbutton->active ); }