Perl/Tk Tutoriel : Button, Entry, Label < Widgets < Bin-Co (traduction FR)

Hello World en Français

traduit par :alain Adelmar
aadelmar@numericable.fr beuuh c est quoi ca

Ce tutorial est de Bin-Co, je l'ai juste traduis et pour pas le garder que pour moi je le met en ligne. Ce document est donc non officiel.



Previous
Hello World 
Next
Frame, Text, Scrollbar, Scale 
Perl/Tk Tutoriel - Création d'un GUI (Interface Utilisateur Graphique) avec le module Tk de Perl
Button, Entry, Label

Widgets 1 : Button, Entry, Label

Un widget est un objet d'interface utilisateur sur des interfaces graphiques X. Confus? Retenez juste que c'est le nom de l'objet qui apparaît à l'écran.
Il existe de nombreux types de widgets.
Si vous souhaitez afficher un bouton, vous utilisez le widget bouton (button).
Pour le texte, vous utilisez le widget text.
Pour l'entrée, vous l'avez deviné, le widget de saisie (entry).
Synthaxe:
my $WidgetVariable = $Window -> WidgetType(?Option 1=>Value 1, ?Option 2=>Value 2 ...??) -> pack();

Trois choses doivent être dites à propos des widgets.
Le premier concerne la variable widget. C'est ce que j'ai expliqué plus tôt. La variable widget doit être unique parmi tous les autres widgets  et sera utilisée chaque fois que ce widget doit être consulté.
La seconde concerne les options. Chaque widget dispose de quelques options qui peuvent être utilisés pour le configurer. Cela se fait généralement lorsque le widget est déclarée, mais il peut être fait par la suite aussi.
La dernière chose concerne les commandes. Chaque widget dispose de commandes qui peut aussi être utilisé pour le configurer ou lui faire faire quelque chose.

Mais avant de commencer, nous avons besoin d'en savoir un peu sur la commande pack. Je l'ai expliqué plus tôt, mais le redit juste une fois de plus afin que vous n'ayez pas à appuyer sur le bouton back. Pack est un gestionnaire d'espace (géométrique).
grid  est un autre gestionnaire de géométrie nous le verrons plus tard. Pack est beaucoup plus simple que grid.
La ligne:
$Bonjour -> pack;
dit à l'interprèteur d'emballer(pack) le widget appelé "$bonjour".


Bouton (Button)

Cela fera un bouton. Il peut être configuré pour exécuter du code lorsque le bouton est enfoncé. Ceci habituellement ce référera à une fonction alors quand le bouton est enfoncé, la fonction sera exécutée. Un bouton (button) est indiqué ci-dessous. Ce bouton est créé en utilisant la balise HTML d'entrée.
Quelques Options
-text=>"TEXT" TEXT will be the text displayed on the button
-command=>CALLBACK CALLBACK will be the code that is called when the button is pushed

#!/usr/local/bin/perl
use Tk;

# Main Window
my $mw = new MainWindow;

my $but = $mw -> Button(-text => "Appuyez",
-command =>\&push_button);

$but -> pack();

MainLoop;

#Ceci est exécuté quand le bouton est pressé
sub push_button {
... peut importe ...
}

Vous avez peut-être remarqué que j'ai utilisé un slash (une barre oblique) (\) dans le rappel de commande (-command =>\&push_button);).
Assurez-vous que le slash est bien là - pour voir pourquoi, allez dans les erreurs les plus communes par Perl/Tk débutants.

Entrée (Entry)

Une entry est un widget qui affiche une chaîne de texte d'une ligne et permet à l'utilisateur de saisir et modifier du texte dedans. Quand une entry a le focus de saisie il affiche un curseur d'insertion pour indiquer où de nouveaux caractères seront insérés. Un élément d'entry est démontrée en utilisant HTML.

Quelques Options
-width=>NUMBER Width (largeur) du champ de saisie. NUMBER devra être un nombre entier (integer).
-textvariable=>\$VARIABLE Le contenu de la variable VARIABLE sera affiché dans le widget. Si dans le widget le texte est édité, la variable sera automatiquement édité.
-state=>STATE L'état du champ de saisie. Il peut être normal, disabled, ou readonly. Si il est readonly le texte ne peut être édité.
Quelque Commandes
Synthaxe Déscription Exemple
$widget -> get(); le texte dans le champ de saisie peut être pris par cette commande $name = $ent -> get();
$widget -> delete(FIRST?,LAST?); Efface un ou plusieurs élements de entry. FIRST est l'indice du premier caractère à effacer, et LAST est l'indice du caractère juste après le dernier à supprimer. Si last n'est pas spécifié il prend par défaut pour FIRST+1, i.e. soit un seul caractère est supprimé. Cette commande retourne une chaîne vide.
$ent -> delete(0,'end');
$widget -> insert(index,"STRING");
Insérer les caractères de la chaîne juste avant le caractère indiqué par index. Indice est 0 pour le premier caractère. Le mot «end» peut être utilisé pour le dernier caractère
$ent -> insert('end',"Hello");

Exemple

#!/usr/local/bin/perl
use Tk;

# Main Window
my $mw = new MainWindow;

#GUI Building Area
my $ent = $mw -> Entry() -> pack();
my $but = $mw -> Button(-text => "Push Me",
-command =>\&push_button);
$but -> pack();

MainLoop;

#This is executed when the button is pressed
sub push_button {
$ent -> insert('end',"Hello");
}

Label

Ce widget affiche text messages.

Some Options
-text => "TEXT" TEXT sera le texte affiché sur le bouton
-font => FONT Spécifie la police à utiliser lors de l'élaboration du texte à l'intérieur du widget. Vous pouvez n'indiquer que la police ou vous pouvez lui donner dans ce format "FONTNAME SIZE STYLE "(Taille Style). Le style peut être gras, normale etc.

Exemple

#!/usr/local/bin/perl
use Tk;

my $mw = new MainWindow; # Main Window

my $lab = $mw -> Label(-text=>"Enter name:") -> pack();
my $ent = $mw -> Entry() -> pack();
my $but = $mw -> Button(-text => "Push Me",
-command =>\&push_button);
$but -> pack();

MainLoop;

#Ceci est exécuté quand le bouton est poussé
sub push_button {
$ent -> insert(0,"Hello, ");
}
Previous
Hello World 
Next
Frame, Text, Scrollbar, Scale 
Contents

Comments

Anonymous at 31 Jul, 2007 02:49
L'exemple ci-dessus avec la fonction push_button ne montre pas le texte "whatever". Aussi, si j'utilise la commande use strict, comment puis-je écrire le texte whatever

Reply to this.
Binny V A at 01 Aug, 2007 06:19
Non - vous m'avez mal compris. Que "whatever" n'est pas le résultat de sortie - je voulais vous pouvez mettre le code que vous voulez à la place. Avec le recul, je crois que je l'ai commenté.

Reply to this.
Anonymous at 31 Jul, 2007 04:31
Je pense que la fonction body(sub) doit être écrit à l'intérieur de MainLoop elle-même. J'ai eu récemment la même question et je crois que la réponse est cette déscription.

Reply to this.
Jack at 01 Aug, 2007 03:17
Y at-il une commande pour activer/désactiver la visibilité d'un widget? de préférence un label et entry widgets

Reply to this.
Binny V A at 01 Aug, 2007 06:28
Il y a la fonction destroy() qui effacera un widget.

my $lab = $mw -> Label(-text=>"Enter name:") -> pack();
$lab->destroy();
Reply to this.
ANGIE at 08 Sep, 2007 04:52
Votre code est trop cool,  vous devriez faire payer, félicitation mec

Reply to this.
Anonymous at 21 Sep, 2007 11:38
merci pour ça

Reply to this.
Anonymous at 21 Sep, 2007 11:43
Avez-vous un exemple d'un bouton dont le "changement d'état» passe de «disable» à  «normale» après un événement?
Ce qui suit, ne marche pas pour moi.

my $Enable_button="disable";
......

$mw->-> Button(-text => "Push Me",
-command =>\&push_button);
-state => $Enable_button,
or
-state => \$Enable_button,
$but -> pack();
.......
then, later
$Enable_button = "normal";


Reply to this.
Binny V A at 22 Sep, 2007 01:15
La bonne façon pour faire ça est...
my $button = $wm-> Button(-text => "Push Me", -command =>\&push_button, -state=>"normal");
Plus loin
$button->configure(-state=>'disabled');

Reply to this.
Paul R at 24 Sep, 2007 07:11
Binny VA.
Ca le fait. Merci pour votre aide

Reply to this.
Sibu.N.L at 11 Mar, 2008 12:59
Binny,

Quand je lance une application simple en Perl/TK comme Hello World en double-cliquant dessus sous Windows XP,
une console s'ouvre également avec la fenêtre Hello World.
Comment éviter ou masquer la fenêtre de commande d'apparaître à l'écran

Merci d'avance,

Sibu.N.L
Reply to this.
Binny V A at 11 Mar, 2008 03:53
Je ne pense pas qu'on puisse rien y faire.

Reply to this.
Kerbiquet at 18 Mar, 2008 04:07
Salut,

Vérifiez cet exemple, tiré du livre de recettes Perl édité par O'Reilly: www.oreilly.com/catalog/perlckbk2/toc.html

La console Windows s'ouvre par disparraitre immediatement.

The windows console pops up by  immediatly.
Reply to this.
Kerbiquet at 18 Mar, 2008 06:33

Vous avez écrit un programme Perl pour le port Windows de Perl et Tk, mais vous obtenez une fenêtre shell DOS à chaque fois que vous démarrez votre programme.
Ajouter ceci au début de votre programme:

BEGIN {
    if ($^O eq 'MSWin32') {
    require Win32::Console;
    Win32::Console::Free( );
        }
    }


Le module Win32:: Console vous permet de contrôler la fenêtre du terminal qui a lancé votre programme. Tout ce que vous devez faire est de fermer cette fenêtre (ou la libéré  dans le langage étrange de l'API Windows) et voila pas de fenêtre embêtante shell DOS.
La documentation du module Console Win32:: , qui est inclus avec les distributions de Perl destiné pour le système Microsoft

Reply to this.
Sibunl at 08 Nov, 2008 12:00
Merci beaucoup.

J'ai essayé et ça a marché.

Sorry, Je suis trop loin pour voir cette reponse.

Sibu.
Reply to this.
Alex De Lara at 05 Jan, 2009 09:21
Ah, c'est en effet, un ajout intéressant à mon sac de trucs volés ;)
Merci

Reply to this.
Anonymous at 20 Mar, 2008 09:21
Entry() prend un 1 ligne-entrée .. Que faire si je veux le faire pour capturer une zone de texte en entrée et la manipuler ..?

Reply to this.
Binny V A at 21 Mar, 2008 03:59
Dans la prochaine page - Text widget.

Reply to this.
Anonymous at 06 May, 2008 01:29
Pouvez-vous s'il vous plaît me dire comment puis-je supprimer ou rendre le scrolledlistbox invisible dans la fenêtre principale?
Je développe 1 application en Tk(VTcl)

Reply to this.
Anonymous at 09 May, 2008 02:37
Salut Binny,
J'ai une sub mainp(),qui tourne en boucle et peut prendre moins d'une seconde ou quelques minutes. Parfois, je veux sortir du programme avant que mainp () se termine. J'ai le code suivant. S'il vous plaît pourriez-vous me suggérer comment y parvenir?

my $print = $right1->Button(-text => 'Build Index',
-command => \&mainp)->
grid(qw/-row 7 -column 1 -sticky se/);
my $exit = $right1->Button(-text => ' Exit ',
-command => [$mw => 'destroy'])->
grid(qw/-row 7 -column 2 -sticky sw/);

Reply to this.
Anonymous at 19 May, 2008 01:02
Salut,
J'essaie de créer et de supprimer les widgets label et entry dynamiquement. Je suis en mesure de créer des widgets mais incapable de supprimer la plage spécifiée de widgets.
Je utilise le gestionnaire gird. Pourriez-vous s'il vous plaît aidez-moi pour les mêmes?

Reply to this.
Anonymous at 12 Jun, 2008 09:11
Si vous exécutez le script perl avec wperl.exe au lieu de perl, pas de console de commande sera affiché. Si vous modifiez les actions pour le type .pl vous pouvez faire un lancement avec wperl.

Reply to this.
Anonymous at 02 Aug, 2008 06:41
Salut
Est-il possible de faire sur le bouton comme bouton Lien hypertexte sens que lorsque je clique sur ce bouton page web ouverte?
Je peux l'insérer dans la sous procedure une partie du code pour ouvrir une application (pour ex.iexplore), mais cela dépendra de la voie de l'application. Y at-il moyen d'obtenir le widget bouton pour ouvrir le navigateur web par défaut pour n'importe quelle configuration personnalisée? Le paramètre d'entrée ne serait url de la page Web.
merci

Reply to this.
Dennis at 13 Oct, 2008 06:06

Cher Monsieur,
Si je me tourne overrideredirect à 1, alors je ne peux pas mettre key-in sur la plage d'entry.
Toutes les key-in apparaîtrons sur la fenêtre de la console cmdtool.
Pourriez-vous m'aider à revoir ce code, si je fais une erreur pour la syntaxe??
Merci donc bouillie pour votre instruction.
S'il vous plaît trouver ci-joint le code test: (sur le système Solaris, Sun Blade-100 ordinateurs)

use Tk;
$main = MainWindow->new;
$main->overrideredirect(1);
$frm1 = $main->Frame ( -relief => 'groove')
->pack( -side => 'top', -fill => 'both');
$lb1 = $frm1->Label ( -bg => 'white')
->pack( -side => 'left' );
$en1 = $frm1->Entry ( -relief => 'sunken', -width => 16 )
->pack( -side => 'left');
MainLoop;

Reply to this.
Anonymous at 27 Nov, 2008 02:12
hi
pourriez-vous s'il vous plaît laissez-moi savoir comment désactiver l'apparition de close(X) option sur une fenêtre utilisant perl??
Thanks.

Reply to this.
Anonymous at 02 Feb, 2009 07:33
my $tton = $fileSelectFrame->Button(
-relief => "groove",
-text => "deletess ",
-command => sub {$list -> delete ("0","end");})->pack();

I have a frame which consits of buttons that are created dynamically but whilst trying to use a button to delete the contents of this frame an error: Failed to Autoload Tk::Widget::delete The $list refers to the frame
Reply to this.
Anonymous at 04 Jun, 2009 02:03
hi,
how to return the output of a subprogram to a textbox?
Reply to this.
Anonymous at 04 Jun, 2009 02:09
I am using a perl program for accessing MySQL database. The program doing some process on the retrieved data.I want to implement GUI or some web based screen for this. I need to display results of the program in textboxes and textarea. Please give me an idea about how to pass the result of the perl program to textbox or textarea.
Reply to this.
Comment
S'il vous plait n'entrez pas vos commentaires sous cette forme - il s'agit de fausse forme confondant le spamming bots. Le formulaire suivant est le réel.
Formatage de Commentaire: balises HTML a, strong, em, b, i, code, pre, p et br admis. D'autres balises seront affichés sous forme de code (<deviendrons &lt;). Urls, sauts de ligne, serons auto-formaté.