
FAQ Perl/TkConsultez toutes les FAQ
Nombre d'auteurs : 3, nombre de questions : 86, dernière mise à jour : 24 mai 2013 Ajouter une question
Bienvenue sur la FAQ Perl/Tk. Cette FAQ a pour vocation de vous enseigner ou de vous faire revoir les notions de Perl/Tk. N'hésitez pas à utiliser le moteur de recherche.
Vous souhaitez participer à l'amélioration de cette FAQ, n'hésitez pas !! Commentez
Bonne lecture !
Pour concevoir un menu déroulant, il faut utiliser le widget BrowseEntry. Il est nécessaire d'appeler le module Tk::BrowseEntry dans votre script. Il est installé avec le module Tk.
BrowseEntry est une classe dérivée du widget Frame (d'un cadre). Toutes les méthodes et options du widget Entry sont utilisables. Si vous souhaitez récupérer la sélection de l'utilisateur, sachez juste que l'option -textvariable a été remplacée par -variable.
Pour en savoir plus, lisez la documentation officielle !
Voici un exemple simple d'utilisation :
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #!/usr/bin/perl use strict; use warnings; use Tk; use Tk::BrowseEntry; my $fenetre_principale = MainWindow->new( -title => 'menu déroulant' ); my $mon_choix; my $menu_deroulant = $fenetre_principale->BrowseEntry( -label => 'Text label : ', -choices => ['choix1', 'choix2'], -variable => \$mon_choix, )->pack(); # ajouter un choix dans le menu déroulant $menu_deroulant->insert('end', 'choix3'); # label choix $fenetre_principale->Label( -textvariable => \$mon_choix, )->pack( qw/ -padx 10 -pady 10 / ); MainLoop; |

Pour créer une boîte de liste, on utilise le widget Tk::Listbox. Voici un exemple très simple :
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | #!/usr/bin/perl use strict; use warnings; use Tk; my $fenetre_principale = MainWindow->new( -title => 'Boite de liste' ); my $liste = $fenetre_principale->Listbox()->pack(); $liste->insert( 'end', qw/jasmine jedai djibril stoyak ClaudeLELOUP autre/ ); MainLoop; |

Il y a quelques méthodes à connaître :
Méthode | Explication | Exemple |
insert | Permet de rajouter des éléments dans la liste | $liste->insert('end', element1, element2, element3...); |
delete | Permet de supprimer des éléments d'une boîte de liste | $liste->delete('indice début', 'indice fin'); ou $liste->delete(indice); |
get | Retourne des éléments de la liste en fonction d'indice donné | $liste->get('indice début', 'indice fin'); ou $liste->get(indice); |
curselection | Elle renvoie un tableau des indices des éléments sélectionnés | my @indices_elt_selectionnes = $liste->curselection(); |
selectionSet | Permet de sélectionner une suite d'éléments | $liste->selectionSet(0,'end'); (sélectionne tout) $liste->selectionSet(0);(sélectionne premier élément) |
selectionClear | Annuler des sélections | $liste->selectionClear(0,'end'); (désélectionne tout) |
... |
Voici un exemple de script créant deux boîtes de liste permettant de sélectionner un ou plusieurs éléments d'une boîte pour la passer à une autre :
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #!/usr/bin/perl use strict; use warnings; use Tk; # Création d'une fenêtre my $fenetre_principale = MainWindow->new( -title => 'Boites de listes' ); my $entete1 = $fenetre_principale->Label( -text => 'liste1' ); my $liste1 = $fenetre_principale->Scrolled( 'Listbox', -scrollbars => 'osoe', # Ascenseur -selectmode => 'extended' # Permet le choix multiple ); # Insertion de données $liste1->insert( 'end', qw/jasmine jedai djibril stoyak ClaudeLELOUP autre/ ); # Pré-sélectionne le premier élément $liste1->selectionSet(0); my $entete2 = $fenetre_principale->Label( -text => 'liste2' ); my $liste2 = $fenetre_principale->Scrolled( 'Listbox', -scrollbars => 'osoe', # Ascenseur -selectmode => 'extended' # Permet le choix multiple ); # Insertion de données $liste2->insert( 'end', qw/Perl Tk Qt4 Wx GTk2/ ); my $bouton1vers2 = $fenetre_principale->Button( -text => '>>', -command => sub { print "liste 1 => liste 2\n"; # Lecture des éléments sélectionnés dans la boîte de liste 1 my @elt_selectionnes = $liste1->curselection(); foreach my $elt1 (@elt_selectionnes) { # insertion des éléments sélectionnés dans la boîte de liste 2 $liste2->insert( 'end', $liste1->get($elt1) ); print "\t => ", $liste1->get($elt1), "\n"; } # Suppression dans la boîte de liste 1 des éléments1 copiés dans la boîte de liste 2. # Le reverse permet de commencer la suppression par le plus grand index, car au fur et à mesure # que l'on supprime un élément de la liste, les index décrémentent. map { $liste1->delete($_) } reverse sort { $a <=> $b } @elt_selectionnes; }, ); my $bouton2vers1 = $fenetre_principale->Button( -text => '<<', -command => sub { print "liste 1 <= liste 2\n"; # Lecture des éléments sélectionnés dans la boîte de liste 2 my @elt_selectionnes = $liste2->curselection(); foreach my $elt2 (@elt_selectionnes) { # insertion des éléments sélectionnés dans la boîte de liste 1 $liste1->insert( 'end', $liste2->get($elt2) ); print "\t <= ", $liste2->get($elt2), "\n"; } # Suppression dans la boîte de liste 2 des éléments copiés dans la boîte de liste 1. # Le reverse permet de commencer la suppression par le plus grand index, car au fur et à mesure # que l'on supprime un élément de la liste, les index décrémentent. map { $liste2->delete($_) } reverse sort { $a <=> $b } @elt_selectionnes; }, ); # Utilisation de grid pour placer les widgets dans la fenêtre $entete1->grid( '-', $entete2 ); $liste1->grid( $bouton1vers2, $liste2 ); $liste1->grid( $bouton2vers1, $liste2 ); $liste1->grid( -rowspan => 2 ); $liste2->grid( -rowspan => 2 ); $bouton1vers2->grid( -sticky => 's' ); $bouton2vers1->grid( -sticky => 'n' ); MainLoop; |

Il est possible de passer un ou plusieurs éléments de la liste 1 vers la liste 2 (ou inversement) en les sélectionnant, puis en cliquant sur le bouton >> ou <<.
Il est souvent important d'afficher le dernier élément d'une boîte de liste. En fait, au fur et à mesure de l'insertion de données dans la boîte de liste, il faut manipuler la barre de défilement pour voir le dernier élément. Pour le faire automatiquement, il faut utiliser la méthode see en lui donnant en argument l'indice de l'élément.
Code perl : | Sélectionner tout |
1 2 | $boite_liste->see(0); # Voir le premier élément de la liste $boite_liste->see('end'); # Voir le dernier élément de la liste |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2025 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.