Vous êtes sur la page 1sur 120

FAQ Perl/Tk

Date de publication : 11/12/2008 Dernire mise jour : 15/07/2011

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'hsitez pas utiliser le moteur de recherche. Vous souhaitez participer l'amlioration de cette FAQ, n'hsitez pas !! Bonne lecture !

Ont contribu cette FAQ :

djibril (Site personnel) - Stoyak - yep2cv -

FAQ Perl/Tk

1. Introduction gnrale (12) ......................................................................................................................................................... 4 1.1. Comprendre la FAQ (4) ................................................................................................................................................... 5 1.2. Introduction Perl/Tk (8) .................................................................................................................................................7 2. Gestion de l'espace (4) ............................................................................................................................................................ 11 3. Les Fentres de premier niveau (MainWindow, Toplevel...) (11) ..........................................................................................20 4. Tous les widgets (39) .............................................................................................................................................................. 25 4.1. Zone de dessin (Canvas) (2) .......................................................................................................................................... 26 4.2. Les boutons (Button) (4) ................................................................................................................................................ 28 4.3. Les tiquettes (Label...) (1) ............................................................................................................................................ 31 4.4. Les champs de texte (Text, ROText...) (6) .................................................................................................................... 32 4.5. Les cadres (Frame, Pane) (4) ......................................................................................................................................... 37 4.6. Les barres de dfilement (Scrolled, Scrollbar...) (1) ......................................................................................................41 4.7. Les onglets (NoteBook) (2) ............................................................................................................................................43 4.8. Les menus (Menu, Menubutton...) (4) ........................................................................................................................... 47 4.9. Les champs de saisie (Entry...) (3) ................................................................................................................................ 57 4.10. Les botes de listes, menus droulant (Listbox...) (3) .................................................................................................. 59 4.11. Les botes de dialogue (Dialog, DialogBox, messageBox...) (5) ................................................................................. 64 4.12. Les barres de progressions (Scale, ProgressBar...) (1) .................................................................................................70 4.13. Les tableaux (3) ............................................................................................................................................................ 72 4.14. Les widgets composites (0) ........................................................................................................................................ 102 5. Les graphes, les images (2) ...................................................................................................................................................103 6. Liaisons d'vnements bind (souris, clavier...) (2) ................................................................................................................105 7. Tk et les threads (1) .............................................................................................................................................................. 108 8. Habillage et configuration des fentres Tk (4) ..................................................................................................................... 109 8.1. Comment habiller automatiquement toute mon application (2) ...................................................................................110 9. Astuces et divers (8) ..............................................................................................................................................................113

-3Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Introduction gnrale

-4Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Introduction gnrale > Comprendre la FAQ A qui s'adresse cette FAQ ?
Auteurs : djibril , La FAQ Perl/Tk a pour but de vous aider dans votre apprentissage du Perl/Tk. Mais elle convient aussi au programmeur averti qui aura besoin de toujours revoir quelques notions importantes.

Comment lire et participer cette FAQ ?


Auteurs : djibril , Cette FAQ est structure en diffrentes sections vous permettant de naviguer et rechercher des informations facilement. Si vous souhaitez avoir des informations sur la cration d'un composant graphique (widget) quelconque, reportez-vous la section "Tous les widgets", la plupart des composants y sont rpertoris. Vous n'avez plus qu' chercher une question et sa rponse. Pensez galement utiliser le moteur de recherche. Par exemple, tapez onglet dans le moteur de recherche, et vous obtiendrez toutes les questions traitant du sujet. Si vous ne trouvez pas la rponse votre question, demandez dans le forum. Nous essayons galement chaque question de mettre un lien vers la documentation officielle. Par exemple, la question "Comment crer un bouton ?", vous aurez la fin de la rponse un lien vers la documentation CPAN du widget Button, vous pourrez ainsi complter vos connaissances. Plusieurs comptences sont actuellement recherches pour amliorer cette FAQ : 1 Rdacteur : bien videmment, toute nouvelle question/rponse est la bienvenue ; 2 Correcteur : malgr nos efforts, des fautes d'orthographe ou de grammaire peuvent subsister. Merci de contacter les administrateurs si vous en dbusquez une... Idem pour les liens errons. N'hsitez pas proposer des questions (mme les plus simples). Si vous n'avez pas de rponses votre/vos question(s), ce n'est pas grave, proposez-la, les forumeurs y rpondront. Pour contribuer, c'est ici : .

Les autres sources d'informations sur Perl/Tk ?


Auteurs : djibril , En dehors de cette FAQ, il existe des tutoriels que vous pouvez lire sur le site de developpez.com. Une fois Perl/Tk install, vous avez beaucoup d'exemples de scripts sur votre ordinateur. Il vous suffit de taper dans une console la commande :
C:\>widget

lien : lien : lien :

Les tutoriels sur les interfaces graphiques en Perl (dvp.com) Livre sur Perl/Tk Tous les modules Tk - CPAN

-5Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

lien :

Article mongueurs sur Perl/Tk

Remerciements
Auteurs : djibril , Nous tenons remercier toute l'quipe de developpez.com pour la relecture de la FAQ, notamment : ClaudeLELOUP pour sa trs grande patience et son efficacit !

Nous remercions galement tous ceux qui nous font rgulirement des propositions, des corrections ou toutes ides d'amliorations.

-6Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Introduction gnrale > Introduction Perl/Tk Qu'est-ce que Perl/Tk ?
Auteurs : djibril , Tk est une bibliothque d'interfaces graphiques multiplateforme qui trouve son origine dans Tcl/Tk. Elle s'interface avec plusieurs langages tels Perl, Ruby, R... L'extension Tk de Perl (Perl/Tk) nous permet de crer facilement des interfaces graphiques l'intrieur des programmes Perl. Elle s'installe trs facilement et c'est ensuite vous de jouer.

Quelle est l'histoire de Tk ?


Auteurs : djibril , A l'origine, Perl n'tait pas conu pour crer des interfaces graphiques, mais pour travailler en console. Par la suite, il a volu grce une grande communaut de dveloppeurs qui fait voluer ce langage. Une extension Tk a ainsi t cre. Elle trouve son origine dans Tcl/Tk et a t adapte par Nick Ing-Simmons afin d'tre utilisable avec Perl. Il n'est absolument pas utile d'installer Tcl pour faire du Perl/TK. A noter qu'il existe maintenant de nombreux modules du package de Tk qui vous permettent de faire des interfaces sympathiques.

Peut-on faire des interfaces graphiques Perl sans Tk ?


Auteurs : djibril , Oui, Tk n'est pas la seule extension de Perl permettant de faire des interfaces graphiques. Il existe aussi des extensions telles : Glade Gtk2 Gtk2::GladeXML Java::Swing Association Perl Qt4 Prima tkx vptk wxPerl Win32::GUI ... Mais cette FAQ n'abordera que Tk, si vous avez de bonnes comptences dans le domaine de ces autres extensions, faitesle nous savoir ! Vous pourrez toujours crer des articles sur ces extensions afin d'en convertir certains !

-7Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Voici un

sondage sur l'utilisation des modules en Perl sur les interfaces graphiques.

Comment installer Perl/Tk ?


Auteurs : djibril , C'est trs simple. Dans un premier temps, vrifiez si Perl Tk est dj install sur votre machine. Ouvrez une console DOS ou linux et tapez ce code :
perl -MTk -e ""

Si vous avez ce type de messages d'erreur :


Can't locate Tk.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at -e line 1. BEGIN failed--compilation aborted at -e line 1.

Tk n'est pas install. Pour l'installer : Installation sous Windows


ppm install Tk

Installation sous Linux/MacOS


perl -MCPAN -e 'install Tk'

Pour plus d'informations sur l'installation des modules Perl, reportez-vous notre

FAQ Perl et aux

cours.

Dois-je tre expert en Perl ?


Auteurs : djibril , Pour dbuter en Perl/Tk, vous n'avez pas besoin de matriser Perl. Il est recommand de connatre au moins les bases du langage.

Premire Interface Tk
Auteurs : djibril , Voici un tout premier script : Premier script Perl Tk
#!/usr/bin/perl use warnings; use strict; use Tk; # Appel du module Tk # Programme principal # Cration de la fentre my $fenetre = new MainWindow( -title => 'Premire fentre Tk', -background => 'white', );

-8Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Premier script Perl Tk


# Taille minimale de ma fentre $fenetre->minsize( 300, 100 ); my $message_accueil = "Bonjour tout le monde\n\nWelcome dans le monde magnifique de Perl/Tk\n\n"; # Affichage d'un texte my $label_accueil = $fenetre->Label( -text => $message_accueil, -background => 'white', )->pack(); # Affichage d'un bouton pour fermer la fentre my $bouton = $fenetre->Button( -text => 'Ferme la fentre', -command => sub { exit; }, )->pack(); MainLoop; # Obligatoire

Voil le rsultat :

Ma premire fentre Perl Tk

Qu'est-ce qu'un widget ?


Auteurs : djibril , Un widget (ou gadget en franais) est un composant d'une interface graphique. Un widget est une fentre (Window), un bouton, une liste, un champ de saisie, un cadre, un menu droulant... Il reprsente tout lment graphique permettant de crer une interface graphique. En Perl/Tk, vous entendrez gnralement parler du widget Button (pour les boutons), du widget Frame (pour crer des cadres), etc. Chacun de ces widgets est cr sur une fentre (MainWindow) qui est aussi un widget.

Qu'est-ce que MainLoop ?


Auteurs : djibril , Classiquement, on utilise Perl via une console. La seule interaction entre l'utilisateur et le programme est le clavier. En utilisant une interface graphique, l'utilisateur peut interagir via la souris et le gestionnaire de fentres (la croix sur la barre par exemple). En Perl/Tk, toutes les entres sont dfinies en vnements (clic ou presse-bouton, etc.). Ces derniers sont traits en boucle de gestion d'vnements (event loop). La boucle d'vnements est lance par la fonction MainLoop. Il est donc important de ne pas oublier de spcifier cette fonction dans vos programmes Perl/Tk. Sinon, votre script vous rendra la main aprs quelques secondes sans avoir affich de fentres. Tout ce qui se trouve avant MainLoop concerne la configuration de votre interface.

-9Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Tout ce qui se trouve aprs sera excut uniquement aprs la destruction de la fentre via la mthode destroy ( $fenetre>destroy ). Bien videmment, les procdures que vous crirez seront dfinies aprs le MainLoop et pourront tre appeles avant. Exemple - MainLoop
#!/usr/bin/perl use warnings; use strict; use Tk; # Appel du module Tk # Programme principal # Cration de la fentre my $fenetre = new MainWindow( -title => 'Premire fentre Tk', -background => 'white', ); # Taille minimale de ma fentre $fenetre->minsize( 300, 100 ); my $message_accueil = "Bonjour tout le monde\n\nWelcome dans le monde magnifique de Perl/Tk\n\n"; # Affichage d'un texte my $label_accueil = $fenetre->Label( -text => $message_accueil, -background => 'white', )->pack(); # Affichage d'un bouton pour fermer la fentre my $bouton = $fenetre->Button( -text => 'Dtruire la fentre', -command => \&detruire_fenetre, )->pack(); MainLoop; # Obligatoire

# Ce code s'excute la destruction de la fentre print 'Affichage aprs MainLoop - fentre dtruite'; sub detruire_fenetre { $fenetre->destroy; return; }

Excutez ce programme depuis une console. Il affichera le message "Affichage aprs MainLoop - fentre dtruite" dans la console aprs avoir cliqu sur le bouton. N.B. Si vous mettez un exit; dans la procdure detruire_fenetre, l'affichage du message ne se fera pas car le script se terminera l'appel de l'exit.

- 10 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Gestion de l'espace Quel gestionnaire d'espace utiliser ?


Auteurs : djibril , Pour afficher les diffrents widgets (bouton, liste, cadre...) dans une fentre, il existe trois mthodes : pack, grid et place. N.B. Vous ne pouvez utiliser qu'une seule mthode par fentre ou par cadre (Frame). Quelle mthode choisir ? Tout dpend de ce que vous voulez faire : 1 2 3 si vous souhaitez positionner vos widgets des coordonnes prcises ou souhaitez chevaucher des widgets, choisissez "place" ; si vous souhaitez une disposition sous forme de grille, choisissez "grid" ; sinon choisissez "pack".

Pourquoi et comment utiliser pack ?


Auteurs : djibril , C'est la mthode la plus couramment utilise. Elle permet de positionner et dimensionner des widgets les uns par rapport aux autres. Ces derniers occupent entirement l'espace ddi, horizontalement et verticalement. Les widgets via cette mthode ne peuvent pas se chevaucher. Exemple d'utilisation : $widget->pack(mes options); Option -ipadx x Valeur Explication ajoute x pixels droite et gauche du widget (x = valeur) ajoute x pixels en haut et en bas du widget (x = valeur) place des espaces gauche et droite du widget (dans le rectangle d'allocation) place des espaces en bas et en haut du widget (dans le rectangle d'allocation) 1 : le rectangle allou remplit entirement l'espace restant le widget remplit dans la direction indique le rectangle d'allocation ancre le widget dans le rectangle qui lui est Exemple -ipadx => x

-ipady

-ipadx => x

-padx

-padx => x

-pady

-pady => x

-expand

0 ou 1

-expand => 1

-fill

'none', 'x' ou 'y'

-fill => 'x'

-anchor

'center', 'n', 'ne', 'e', 'se', 's', 'sw', 'w' ou 'nw'

-anchor => 'sw'

- 11 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

-side

'top', 'left', 'right' ou 'bottom' $autre_widget $autre_widget $autre_fenetre

-before -after -in

allou (se = sud est, n = nord...) place le widget contre le bord spcifi de la fentre/cadre place le widget avant $autre_widget place le widget aprs $autre_widget place le widget dans $autre_fenetre au lieu du parent

-side => 'left'

-before => $autre_widget -after => $autre_widget -in => $autre_fenetre

Vous avez votre disposition un programme vous permettant d'afficher quatre boutons que vous pouvez configurer volont en utilisant toutes les options de pack (sauf -after, -before et -in). N'hsitez pas le tlcharger et l'utiliser pour jouer avec les options de pack. Voici quelques rsultats du script :

- 12 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Rsultat

lien : Tk::pack Programmes de gestion de pack

Pourquoi et comment utiliser grid ?


Auteurs : djibril , Cette mthode a la particularit de faciliter l'affichage sous forme de grille. Elle sectionne la fentre en un tableur de plusieurs lignes et colonnes. Il existe deux faons d'utiliser la mthode grid : 1 une mthode d'affichage ligne par ligne ; 2 une mthode d'affichage case par case.

- 13 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Grid utilise des options identiques pack, je ne reviendrai pas sur ces explications. Il s'agit des options -ipadx, -ipady, -padx, -pady et -in. Voici les autres options de grid. Option '-' Valeur aucune (caractre spcial) Explication prolonge la case de gauche verticalement (ne peut suivre ni un '^', ni un 'x'). Elle augmente la valeur de l'option columspan du widget se trouvant avant lui laisse un espace vide, une case vide o un widget aurait t plac. Exemple $Bouton1>grid($Bouton2, $Bouton3,); $Bouton4->grid('-', $Bouton6,-sticky => 'we');

'x'

aucune (caractre spcial)

'^'

aucune (caractre spcial)

-sticky

'n', 's', 'e' ou 'w' ou une combinaison

-column

n (n >= 0)

-row

m (m >= 0)

-columnspan

n (n >= 0)

-rowspan

m (m >= 0)

$Bouton1>grid($Bouton2, $Bouton3,); $Bouton4->grid('x', $Bouton6,); prolonge la case du $Bouton1haut. Elle augmente >grid($Bouton2, la valeur de l'option - $Bouton3,-sticky => rowspan du widget se 'ns'); trouvant au-dessus $Bouton4>grid( $Bouton5,'^',sticky => 'ns'); dfinit les cts $Bouton1->grid( de contact pour sticky => 'nsew'); le widget. C'est l'quivalent de -fill et -expand avec le gestionnaire d'espace pack spcifie le numro $Bouton2->grid(-row de la colonne o sera => 0, -column => 1, ); plac le widget (la premire colonne est 0) spcifie le numro de $Bouton2->grid(-row la ligne o sera plac => 0, -column => 1, ); le widget (la premire ligne est 0) le widget occupera $Bouton1->grid(l'espace de n colonnes row => 0, -column => 0, -rowspan => 2, columnspan => 2, sticky => 'nsew', ); le widget occupera $Bouton1->grid(l'espace de m lignes row => 0, -column => 0, -rowspan => 2, columnspan => 2, sticky => 'nsew', );

Voici cinq figures que nous avons ralises avec les deux mthodes :

- 14 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Exemples grid Grid - mthode ligne par ligne

Lorsque vous utilisez cette mthode, l'appel grid se fait pour chaque ligne afficher dans la fentre/cadre. En rsum, un appel grid quivaut une ligne. Exemple d'utilisation : $WidgetX->grid(Liste de widgets, mes options); WidgetX = Un cadre, un bouton, etc. Le script ci-dessous vous permet d'afficher les quatre exemples. Le script doit tre appel avec en argument 1, 2, 3 ou 4. Cration de la fentre avec les boutons - ligne par ligne
#!/usr/bin/perl use warnings; use strict; use Tk; # Rcupration du numro d'exemple my $numero_exemple = $ARGV[0]; chomp $numero_exemple; unless ( $numero_exemple =~ m{^[12345]$} ) { $numero_exemple = 1; } # Cration de la fentre my $fenetre = new MainWindow( -title => "Exemple $numero_exemple", -background => 'white', ); $fenetre->minsize( 230, 75 ); # 6 boutons my $Bouton1 my $Bouton2 my $Bouton3 my $Bouton4 my $Bouton5 my $Bouton6

= = = = = =

$fenetre->Button( $fenetre->Button( $fenetre->Button( $fenetre->Button( $fenetre->Button( $fenetre->Button(

-text -text -text -text -text -text

=> => => => => =>

'Num1' 'Num2' 'Num3' 'Num4' 'Num5' 'Num6'

); ); ); ); ); );

# A ce stade, les boutons ne seront pas affichs

- 15 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Cration de la fentre avec les boutons - ligne par ligne


if ( $numero_exemple == 1 ) { $Bouton1->grid( $Bouton2, $Bouton3, ); $Bouton4->grid( $Bouton5, $Bouton6, ); } elsif ( $numero_exemple == 2 ) { $Bouton1->grid( $Bouton2, $Bouton3, ); $Bouton4->grid( 'x', $Bouton6, ); } elsif ( $numero_exemple == 3 ) { $Bouton1->grid( $Bouton2, $Bouton3, ); $Bouton1->grid( $Bouton4, $Bouton5, ); $Bouton1->grid( -rowspan => 2, -sticky => 'ns' } elsif ( $numero_exemple == 4 ) { $Bouton1->grid( $Bouton2, $Bouton3, -sticky => $Bouton4->grid( $Bouton5, '^', -sticky => } elsif ( $numero_exemple == 5 ) { $Bouton1->grid( $Bouton2, $Bouton3, -sticky => $Bouton4->grid( $Bouton5, '-', -sticky => } MainLoop;

);

'ns' ); 'ns' );

'ns' ); 'nsew' );

Grid - mthode case par case

Cette mthode est plus intuitive et comprhensible ! N.B. Lorsque l'on utilise cette mthode, les seules options utilisables sont : -column, -columnspan, -in, -ipadx, -ipady, padx, -pady, -row, -rowspan, ou -sticky. Donc vous ne pouvez pas utiliser les options, '-', '^' et 'x'. Exemple d'utilisation : $WidgetX->grid(mes options); WidgetX = Un cadre, un bouton, etc. Cration de la fentre avec les boutons - case par case
#!/usr/bin/perl use warnings; use strict; use Tk; # Rcupration du numro d'exemple my $numero_exemple = $ARGV[0]; chomp $numero_exemple; unless ( $numero_exemple =~ m{^[12345]$} ) { $numero_exemple = 1; } # Cration de la fentre my $fenetre = new MainWindow( -title => "Exemple $numero_exemple", -background => 'white', ); $fenetre->minsize( 230, 75 ); # 6 boutons my $Bouton1 my $Bouton2 my $Bouton3 my $Bouton4 my $Bouton5 my $Bouton6

= = = = = =

$fenetre->Button( $fenetre->Button( $fenetre->Button( $fenetre->Button( $fenetre->Button( $fenetre->Button(

-text -text -text -text -text -text

=> => => => => =>

'Num1' 'Num2' 'Num3' 'Num4' 'Num5' 'Num6'

); ); ); ); ); );

# A ce stade, les boutons ne seront pas affichs if ( $numero_exemple == 1 ) {

- 16 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Cration de la fentre avec les boutons - case par case


$Bouton1->grid(-row $Bouton2->grid(-row $Bouton3->grid(-row $Bouton4->grid(-row $Bouton5->grid(-row $Bouton6->grid(-row => => => => => => 0, 0, 0, 1, 1, 1, -column -column -column -column -column -column => => => => => => 0, 1, 2, 0, 1, 2, ); ); ); ); ); );

} elsif ( $numero_exemple == 2 ) { $Bouton1->grid(-row => 0, -column $Bouton2->grid(-row => 0, -column $Bouton3->grid(-row => 0, -column $Bouton4->grid(-row => 1, -column $Bouton6->grid(-row => 1, -column } elsif ( $numero_exemple == 3 ) { $Bouton1->grid(-row => 0, -column $Bouton2->grid(-row => 0, -column $Bouton3->grid(-row => 0, -column $Bouton4->grid(-row => 1, -column $Bouton5->grid(-row => 1, -column } elsif ( $numero_exemple == 4 ) { $Bouton1->grid(-row => 0, -column $Bouton2->grid(-row => 0, -column $Bouton3->grid(-row => 0, -column $Bouton4->grid(-row => 1, -column $Bouton5->grid(-row => 1, -column } elsif ( $numero_exemple == 5 ) { $Bouton1->grid(-row => 0, -column $Bouton2->grid(-row => 0, -column $Bouton3->grid(-row => 0, -column $Bouton4->grid(-row => 1, -column $Bouton5->grid(-row => 1, -column } MainLoop;

=> => => => =>

0, 1, 2, 0, 2,

); ); ); ); );

=> => => => =>

0, 1, 2, 1, 2,

-rowspan => 2, -sticky => 'nsew', ); ); ); ); );

=> => => => =>

0, 1, 2, 0, 1,

); ); -rowspan => 2, -sticky => 'nsew',); ); );

=> => => => =>

0, 1, 2, 0, 1,

); ); ); ); -columnspan => 2, -sticky => 'nsew', );

Grid est vraiment pratique pour des positionnements sous forme de grille. Pour l'alignement vertical des widgets. Il est ainsi trs pratique lorsque l'on veut faire des formulaires. Avec pack, nous sommes obligs de faire des cadres de cadres pour bien positionner les widgets verticalement. Configuration des lignes et des colonnes, d'aprs le livre Introduction Perl/Tk, de Nancy Walsh. Si vous utilisez -sticky avec vos widgets, puis que vous modifiez la taille des fentres, vous noterez que leur taille ne varie pas comme vous l'attendiez. Cela est d au fait que le changement de taille des cellules et des widgets qu'elles contiennent est pris en charge par les mthodes gridColumnconfigure et gridRowconfigure. Ces deux mthodes fonctionnent presque comme la mthode configure utilise sur les widgets. A la diffrence, cependant, les options utilisables avec ces deux mthodes ne peuvent tre utilises avec la mthode grid. Les options possibles sont -weight, -minsize et -pad. Nous allons juste nous focaliser sur l'option -weight. Pour en savoir plus, lisez la documentation officielle. L'option -weight permet de prciser l'espace qui sera allou cette colonne ou cette ligne lorsque la fentre est divise en cellules. Rappelez-vous qu'il faut utiliser -sticky => 'nsew' dans votre appel grid si vous voulez que le widget change de taille en mme temps que la cellule. La valeur par dfaut de -weight est 0. Dans ce cas, la largeur de la colonne sera celle du widget le plus large, et la hauteur de la ligne sera celle du widget le plus haut. Chaque valeur de -weight est en relation avec les autres -weight des lignes et colonnes. Si une colonne ou une ligne a une option de 2, elle est deux fois la taille d'une colonne ou d'une ligne ayant une valeur 1 pour cette option. Les colonnes ou lignes ayant l'option -weight 0 n'auront pas leur taille modifie. Si vous voulez que tous vos widgets changent de taille en mme temps que la fentre, ajoutez ceci votre code avant d'appeler MainLoop : weight
my ($colonne, $ligne) = $CADRE_ou_Fenetre->gridSize(); for (my $i = 0; $i < $colonne; $i++) { - 17 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

weight
$CADRE_ou_Fenetre->gridColumnconfigure($i, -weight => 1); } for (my $i = 0; $i < $ligne; $i++) { $CADRE_ou_Fenetre->gridRowconfigure($i, -weight => 1); }

L'option sera applique tous les widgets. Voici un exemple : Exemple d'utilisation de -weight
#!/usr/bin/perl use warnings; use strict; use Tk; # Cration de la fentre my $fenetre = new MainWindow( -title => 'Exemple weight', -background => 'white', ); $fenetre->minsize( 230, 75 ); # 6 boutons my $Bouton1 my $Bouton2 my $Bouton3 my $Bouton4 my $Bouton5 my $Bouton6

= = = = = =

$fenetre->Button( $fenetre->Button( $fenetre->Button( $fenetre->Button( $fenetre->Button( $fenetre->Button( => => => => => => 0, 0, 0, 1, 1, 1,

-text -text -text -text -text -text => => => => => =>

=> => => => => => 0, 1, 2, 0, 1, 2,

'Num1' 'Num2' 'Num3' 'Num4' 'Num5' 'Num6'

); ); ); ); ); );

$Bouton1->grid(-row $Bouton2->grid(-row $Bouton3->grid(-row $Bouton4->grid(-row $Bouton5->grid(-row $Bouton6->grid(-row

-column -column -column -column -column -column

); ); ); -sticky => 'nsew' ); -sticky => 'nsew' ); -sticky => 'nsew' );

# modification de la ligne 1 et toutes les colonnes my ($colonne, $ligne) = $fenetre->gridSize(); for (my $i = 0; $i < $colonne; $i++) { $fenetre->gridColumnconfigure($i, -weight => 1); } $fenetre->gridRowconfigure(1, -weight => 1);

MainLoop;

lien :

Tk::grid

Pourquoi et comment utiliser place ?


Auteurs : djibril , Il permet de positionner les widgets via des coordonnes x et y. De ce fait, il est possible de faire chevaucher les widgets, ce qui est impossible avec pack et grid. Faire chevaucher des widgets peut vous permettre de mettre des widgets audessus d'une image de fond !! Mthode d'utilisation de place : $widget->place(mes options);

- 18 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Option -bordermode

Valeur 'inside', 'outside' ou 'ignore' x

-x et -y

-relx et -rely

x (valeur ratio)

-width et -height

-relwidth et -relheight x (valeur ratio) -in $autre_fenetre

Explication inclure ou non le contour du cadre ou de la fentre coordonnes en distance d'cran (pixel) Les coordonnes (0,0) correspondent au coin suprieur gauche coordonnes relatives dans le widget parent. Il dplace de n ratio Les coordonnes (0.0,0.0) correspondent au coin suprieur gauche. Les coordonnes (1.0,1.0) correspondent au coin infrieur droit. N.B. on peut combiner -rely et y. Exemple : -rely => 0.5, -y => 25 : placer le widget 25 pixels en bas du centre de la fentre ou cadre si vous spcifiez ces options, votre widget aura la taille absolue dfinie valeur ratio avec le widget parent. place le widget dans $autre_fenetre au lieu du parent Attention, dans ce cas, les coordonnes feront toujours rfrence au widget parent et non $autre_fenetre

Exemple -bordermode => 'outside' -x => 12, -y => 20

-relx => 50

-width => 175

-relwidth => 50 -in => $autre_fenetre

lien :

Tk::place

- 19 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Les Fentres de premier niveau (MainWindow, Toplevel...) Comment changer le titre d'un widget ?
Auteurs : djibril , la mthode "title" permet de mettre un titre la fentre Tk, sinon c'est le nom du script qui sera affich.
$widget->title('Titre de mon widget');

lien :

Tk::Wm

Comment faire une fentre sans dcors (barre des titres, contours) ?
Auteurs : djibril , Il est possible de faire une fentre sans barre de titre, dcors et contours.
# Pour enlever les dcors $widget->overrideredirect(1);

N.B. Il vous sera impossible de fermer la fentre via la croix vu qu'il n'y a plus de barre, ainsi que de dplacer la fentre. Pensez prvoir un bouton pour l'occasion !

fentre sans dcors

lien :

Les options sur le widget Tk

Comment changer l'icne de la fentre de mon application ?


Auteurs : djibril , Il est possible de changer l'icne Tk qui est gauche de la barre. Pour cela il faut utiliser la mthode iconimage.
$widget->iconimage($photo_icone);

N.B. $photo_icone est une rfrence une image cre via la mthode Photo ou Bitmap.
use Tk::Photo; use Tk::PNG; my $photo_icone = $widget->Photo( -format => 'png', -file => 'C:/MonIcone.png' );

lien : lien :

Tk::Photo Tk::JPEG

- 20 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

lien :

Tk::PNG

Comment empcher la fermeture de ma fentre lors d'un clic sur la croix en haut droite ?
Auteurs : djibril , Utilisez la mthode "protocole" qui contrle les proprits des fentres et notamment l'argument WM_DELETE_WINDOW. En y assignant une fonction de rappel nulle, rien ne se passera aprs un clic sur la croix en haut droite de la fentre.
$widget->protocol( "WM_DELETE_WINDOW", sub { return; } );

lien :

Tk::Wm

Comment connatre la position de mon widget ?


Auteurs : djibril , Coordonnes du coin suprieur gauche du widget, relativement son parent Position d'un widget en pixels
$widget->update; my $x = $widget->x(); my $y = $widget->y();

Coordonnes du coin suprieur gauche du widget, relativement la fentre racine Position d'un widget en pixels
$widget->update; my $x = $widget->rootx(); my $y = $widget->rooty();

Il est important de faire un update du widget, sinon vous obtiendrez les coordonnes (0,0).

Comment centrer ses widgets de premier niveau ?


Auteurs : djibril , On peut constater qu' chaque fois que l'on cre une fentre Tk, celle-ci est positionne un peu alatoirement l'cran. Utilisez la procdure centrer_widget du programme ci-dessous pour centrer vos widgets. Centrer une fentre Tk
#!/usr/bin/perl use warnings; use strict; use Tk; # Appel du module Tk # Programme principal # Cration de la fentre my $fenetre = new MainWindow( -title => 'Premire fentre Tk', -background => 'white', ); # Taille minimale de ma fentre $fenetre->minsize( 300, 100 );

- 21 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Centrer une fentre Tk


my $message_accueil = "Bonjour tout le monde\n\nWelcome dans le monde magnifique de Perl/Tk\n\n"; # Affichage d'un texte my $label_accueil = $fenetre->Label( -text => $message_accueil, -background => 'white', )->pack(); # Affichage d'un bouton pour fermer la fentre my $bouton = $fenetre->Button( -text => 'Dtruire la fentre', -command => sub { exit; }, )->pack(); # Centrer ma fentre centrer_widget($fenetre); MainLoop; # Obligatoire

#================================================ # But : Centrer un widget automatiquement #================================================ sub centrer_widget { my ( $widget ) = @_; # Height and width of the screen my $largeur_ecran = $widget->screenwidth(); my $hauteur_ecran = $widget->screenheight(); # update le widget pour rcuprer les vraies dimensions $widget->update; my $largeur_widget = $widget->width; my $hauteur_widget = $widget->height; # On centre le widget en fonction de la taille de l'cran my $nouvelle_largeur = int( ( $largeur_ecran - $largeur_widget ) / 2 ); my $nouvelle_hauteur = int( ( $hauteur_ecran - $hauteur_widget ) / 2 ); $widget->geometry($largeur_widget . "x" . $hauteur_widget . "+$nouvelle_largeur+$nouvelle_hauteur"); $widget->update; return; }

lien :

Les options sur le widget Tk

Comment fermer une fentre ou un widget ?


Auteurs : djibril , Pour fermer une fentre ou un widget, on utilise la mthode destroy. Elle permet de dtruire le widget en question, ainsi que ses widgets fils s'il en existe.
$widget->destroy;

On peut galement fermer la fentre avec exit. Dans ce cas, ce sera le script qui sera brutalement termin et tous les widgets seront ferms.

- 22 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

-command => { exit;},

Comment icnifier, rendre invisible et restaurer ma fentre ?


Auteurs : djibril , Icnifier ma fentre
$fenetre->iconify();

Rendre invisible ma fentre sans la dtruire


$fenetre->withdraw();

Restaurer ma fentre
# si la fentre existe, je la restaure if ( Exists( $fenetre ) ) { $fenetre->deiconify(); $fenetre->raise(); }

Comment savoir si une fentre est affiche ?


Auteurs : djibril ,
if ( $fenetre->ismapped() ) { # => fentre affiche } else { # => fentre pas affiche }

Comment mettre une fentre au premier plan ?


Auteurs : djibril , Lorsque vous crez un widget de premier niveau avec MainWindow ou Toplevel, il se peut que ce dernier ne soit pas au premier plan. Pour pallier ce problme, il suffit de lui donner le focus clavier. On force le widget possder le focus clavier focus
$widget->focus;

Il est aussi possible de forcer l'application avoir le focus clavier mme si cette dernire n'est pas active. focus
$widget->focusForce;

- 23 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Pour en savoir plus sur les focus, consultez la documentation sur

Perl/Tk et le focus.

Comment empcher le redimensionnement d'une fentre ?


Auteurs : djibril , Si vous souhaitez qu'une fentre MainWindow ou Toplevel ne soit pas modifiable en hauteur, largeur ou les deux, il faut utiliser la mthode resizable. Cette mthode prend deux arguments (un pour la largeur et un autre pour la hauteur). Ces arguments seront gaux 0 ou 1. 0 veut dire non modifiable et 1 modifiable. Voici un exemple d'une fentre de 300x300 qui sera non modifiable : Fentre non modifiable
#!/usr/bin/perl use warnings; use strict; use Tk; my $fenetre = new MainWindow( -title => 'Resizable', ); $fenetre->geometry("300x300+50+50"); # Fentre non modifiable $fenetre->resizable(0,0); MainLoop;

lien :

Tk::Wm

- 24 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Tous les widgets

- 25 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Tous les widgets > Zone de dessin (Canvas) Comment crer un canevas pour dessiner ?
Auteurs : djibril , Pour dessiner, vous devez crer un widget Canvas, de prfrence avec un scrollbar au cas o le dessin serait de grande taille. Scrolled Canvas
# Scrolled, puis Canvas my $scrolled_canvas = $widget->Scrolled( 'Canvas', -borderwidth => 1, -scrollbars => 'osoe', -background => 'white', ); my $canvas = $scrolled_canvas>Subwidget('canvas');

Ensuite, vous n'avez plus qu' utiliser $canvas pour dessiner.

lien :

Tk::Canvas

Comment crer un canevas avec une couleur de fond dgrade ?


Auteurs : djibril , Il est possible de crer un widget Canvas avec une couleur de fond dgrade. Pour ce faire, utilisez le widget Tk::Canvas::GradientColor. Ce module contient des mthodes permettant de raliser diffrents types de dgrads. Voici deux exemples :
#!/usr/bin/perl use strict; use warnings; use Tk; use Tk::Canvas::GradientColor; my $mw = new MainWindow( -title => 'Tk::Canvas::GradientColor', -background => 'white', ); my $canvas = $mw->GradientColor( -width => 200, -height => 200, )->pack(qw/ -fill both -expand 1 /); # Change type $canvas->set_gradientcolor( -start => 50, -end => 100, -type => 'mirror_vertical' ); MainLoop;

- 26 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

#!/usr/bin/perl use strict; use warnings; use Tk; use Tk::Canvas::GradientColor; my $mw = new MainWindow( -title => 'Tk::Canvas::GradientColor', -background => 'white', ); my $canvas = $mw->GradientColor( -width => 200, -height => 200, )->pack(qw/ -fill both -expand 1 /); # Change type $canvas->set_gradientcolor( -start_color => '#C87997', -end_color => '#FFF697', ); MainLoop;

lien :

Tk::Canvas::GradientColor

- 27 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Tous les widgets > Les boutons (Button) Comment crer un bouton ?
Auteurs : djibril , Pour crer un bouton, on doit utiliser le widget Button. bouton
#!/usr/bin/perl use strict; use warnings; use Tk; my $fenetre_principale = MainWindow->new( -title => 'bouton' ); $fenetre_principale->Button ( -text => 'Bouton fermeture', -command => sub { exit; }, )->pack(); MainLoop;

lien :

Tk::Button

Comment mettre une image sur un bouton ?


Auteurs : djibril , Pour afficher une image sur un bouton, on utilise l'option -image la place de l'option -text. Exemple:
#!/usr/bin/perl use strict; use warnings; use Tk; use Tk::Photo; use Tk::JPEG; my $fenetre = new MainWindow( -title => 'button image', -background => 'white', );

my $objet_image = $fenetre->Photo( -file => 'fermer.jpg' ); $fenetre->Button ( -image => $objet_image, -command => sub { exit; }, )->pack(); MainLoop;

Il faut utiliser le module Tk::Photo pour crer l'objet image. Ensuite, si on travaille sur un fichier jpeg, on appellera le module Tk::JPEG, sinon il y a le module Tk::PNG et Tk::Bitmap. Pour les fichiers gif, pas besoin d'appeler le module Tk::GIF (il n'existe pas !), mais Tk le lit tout seul !

lien : lien :

Tk::Photo Tk::png

- 28 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

lien : lien :

Tk::Bitmap Tk::jpeg

Comment passer des arguments (-command et arguments) ?


Auteurs : djibril , Il existe trois faons d'utiliser l'option -command dans un widget de type Button : -command => sub { ... }, ; -command => \&ma_fonction, ; -command => [\&ma_fonction, $arg1, $arg2...],.

La troisime mthode permet de passer des arguments la fonction qui sera lance lorsque l'utilisateur cliquera sur votre bouton.
#!/usr/bin/perl use strict; use warnings; use Tk; my $fenetre_principale = MainWindow->new( -title => '-command' ); $fenetre_principale->Button ( -text => 'Bouton fermeture', -command => [\&fermer, 'perlen'], )->pack();

MainLoop; sub fermer { print "Au revoir ",@_; sleep 2; exit; }

Ce script affichera "Au revoir perlen" aprs un clic sur le bouton.

Comment crer un bouton avec une couleur de fond dgrade ?


Auteurs : djibril , Il est possible de crer un bouton avec une couleur de fond dgrade. Pour ce faire, utilisez le widget Tk::ColoredButton. Ce widget utilise le module Tk::Canvas::GradientColor et simule parfaitement le fonctionnement d'un bouton. Voici une capture d'cran issue de la documentation du module.

- 29 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Exemple d'utilisation
#!/usr/bin/perl use strict; use warnings; use Tk; use Tk::ColoredButton; my $mw = MainWindow->new( -background => 'white', -title => 'ColoredButton example' ); my $colored_button = $mw->ColoredButton( -text => 'ColoredButton1', -autofit => 1, -font => '{arial} 12 bold', -command => sub { print "hello\n"; }, )->pack(qw/-padx 10 -pady 10 /); MainLoop;

lien : lien :

Tk::ColoredButton Tk::Canvas::GradientColor

- 30 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Tous les widgets > Les tiquettes (Label...) Comment crer une tiquette, un texte dans une fentre ou un cadre ?
Auteurs : Stoyak ,
my $label = $fenetre->Label( -text => 'mon tiquette', )->pack();

lien :

Tk::Label

- 31 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Tous les widgets > Les champs de texte (Text, ROText...) Comment crer un champ de texte ?
Auteurs : djibril , Pour crer un champ texte, il faut utiliser le widget Text.
#!/usr/bin/perl use strict; use warnings; use Tk; my $fenetre_principale = MainWindow->new( -title => 'Text' ); my $widget_texte = $fenetre_principale->Text( )->pack( ); $widget_texte->insert('end', "1 : Ligne 1 : exemple\n"); $widget_texte->insert('end', "2 : Ligne 2 : exemple\n"); print $widget_texte->get('1.0', '1.end'),"\n"; print $widget_texte->get('2.0', '2.end'),"\n"; # affiche la premire ligne # affiche la deuxime ligne

# affiche le tout print 'Tout : ',$widget_texte->get('1.0', 'end'); my $bouton_selection = $fenetre_principale->Button( -text => 'affichez selection', -command => sub { print $widget_texte->getSelected,"\n"; }, )->pack();

# affiche tout

MainLoop;

Pour rcuprer des lignes, il faut utiliser la mthode get.

- 32 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Text

lien :

Tk::Text

Comment crer un champ de texte en lecture seule ?


Auteurs : djibril , Il faut utiliser le widget ROText de la mme faon que le widget Text.
my $widget_texte_readonly = $fenetre_principale->ROText( )->pack( );

lien :

Tk::ROText

Qu'est-ce qu'un indice des widgets Text et ROText ?


Auteurs : djibril , Un indice d'un widget text dsigne une ligne prcise ou l'un de ses caractres. Il est construit en utilisant un indice de base suivi ventuellement d'un modificateur.

- 33 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

'l.c'

'end' @x.y marqueur.first

marqueur.last 'mark'

$widget

$image

l pour numro de ligne et c pour numro de colonne (caractres). l commence toujours 1 et c 0 fin du widget, aprs le retour chariot \n Le caractre le plus prs des coordonnes x et y Premier caractre de type marqueur (tag) du widget text. exemple (gras.titre) si vous avez un marqueur 'gras' Caractre plac immdiatement aprs le texte marqu marqueur (exemple : 'gras') Indique le caractre juste aprs la marque nomme 'mark' (exemple de marques : insert, anchor, current) Il est possible de dsigner l'emplacement par rapport un widget que vous auriez plac dans le widget text Idem que $widget, mais par rapport l'emplacement d'une image

[ + | - ] nombre [ chars | lines ] 'linestart' 'lineend' 'wordstart' 'wordend'

+ et - permettent d'additionner ou soustraire des lignes ou caractres un indice de base Modifie l'indice afin de dsigner le premier caractre de cette ligne Dsigne le dernier caractre de la ligne Ajuste l'indice pour qu'il dsigne le premier caractre du mot point par l'indice de base Ajuste l'indice pour qu'il dsigne le caractre plac aprs la fin du mot point par l'indice de base

L'idal pour mieux comprendre ces notions est d'essayer de comprendre les exemples suivants : end - 1 lines 'end linestart' '1.0' '1.end' '3.0 - 1 chars' '3.0 - lineend' Texte plac sur la ligne avant 'end' Ligne devant la dernire ligne Premier caractre de la premire ligne Dernier caractre de la premire ligne Dernier caractre de la deuxime ligne (3e ligne te d'un caractre) Fin de la troisime ligne

lien : lien :

Tk::Text (voir section INDICE) Livre Introduction Perl/Tk

Comment rcuprer les donnes d'un widget Text, ROText ?


Auteurs : djibril , Pour rcuprer les donnes dans un widget Text ou ROText, utilisez la mthode get. Cette mthode retourne le texte compris entre un indice de dbut et de fin spcifi. L'exemple ci-dessous rcupre tout le texte du widget.

- 34 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Toutes les lignes dans une seule variable


my $data = $widget_text->get('1.0','end');

Une ligne dans chaque case du tableau


my @lignes = split( /\n/, $widget_text->get('1.0','end') );

lien :

Tk::Text

Comment voir une ligne d'un widget Text ou ROText ?


Auteurs : djibril , Il est souvent important d'afficher la dernire ligne d'un widget Text ou ROText. Au fur et mesure de l'insertion de donnes dans le widget, il faut descendre l'ascenseur (barre de dfilement) manuellement pour voir la dernire ligne. Pour le faire automatiquement, il faut utiliser la mthode see en lui donnant en argument l'indice de la ligne.
$widget_text->see('1.0'); # Voir la premire ligne du widget $widget_text->see('25.0'); # Voir la 25e ligne du widget $widget_text->see('end'); # Voir la dernire ligne du widget

Comment changer la couleur du texte dans un widget Text ?


Auteurs : djibril , Lorsque vous souhaitez appliquer une couleur tout le texte de votre widget, il suffit d'utiliser l'option -foreground sa cration. La couleur s'appliquera toutes les lignes de texte du widget. Cependant, si vous avez envie d'appliquer des couleurs des portions de texte, certaines lignes, il faut utiliser des marqueurs. Voici un exemple de code o nous crons deux marqueurs. Le premier pour mettre un texte en rouge et la ligne en gris, puis un deuxime permettant de mettre le texte en bleu et en gras.
#!/usr/bin/perl use strict; use warnings; use Tk; my $fenetre_principale = MainWindow->new( -title => 'Couleur texte' ); my $widget_texte = $fenetre_principale->Text()->pack(); # Cration des tags $widget_texte->tagConfigure( 'rouge', -background => '#E3E3E3', -foreground => 'red', ); $widget_texte->tagConfigure( 'bleue_gras', -foreground => 'blue', -font => '{Courrier New} 10 {bold}', ); $widget_texte->insert( $widget_texte->insert( $widget_texte->insert( $widget_texte->insert( $widget_texte->insert( $widget_texte->insert( $widget_texte->insert( 'end', 'end', 'end', 'end', 'end', 'end', 'end', "Ligne en rouge\n", 'rouge' ); "Ligne en bleu gras\n", 'bleue_gras' ); 'Bonjour ' ); 'mes amis les perlens aimant le ', 'bleue_gras' ); 'Perl/TK', 'rouge' ); "\nMerci de votre lecture\n" ); "Au revoir\n" );

- 35 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

$widget_texte->insert( 'end', "Bye\n", MainLoop;

'bleue_gras' );

Exemple

lien :

Tk::Text

- 36 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Tous les widgets > Les cadres (Frame, Pane) Comment crer un cadre ?
Auteurs : djibril , Un cadre est un support sur lequel vous pouvez placer des widgets (bouton, texte...). Il est aussi trs utilis pour grer l'alignement des widgets lorsque l'on utilise le gestionnaire d'espace pack. Sachez aussi qu'un cadre est invisible tant qu'il ne contient aucun widget. La cration d'un cadre est trs simple, il suffit d'utiliser le widget Tk::Frame.
#!/usr/bin/perl use strict; use warnings; use Tk; my $fenetre_principale = MainWindow->new( -title => 'Cadres' ); $fenetre_principale->minsize(300,300); my $cadre1 = $fenetre_principale->Frame( -background => '#CCCCFF', )->pack( qw/ -fill both -expand 1/ ); $cadre1->Label( -text => 'text1 cadre1' )->pack( -side => 'left'); $cadre1->Label( -text => 'text2 cadre1' )->pack( -side => 'right'); my $cadre2 = $fenetre_principale->Frame( -background => 'red', )->pack( qw/ -fill x/ ); $cadre2->Button( -text => 'quitter', -command => sub { exit;} )->pack();

MainLoop;

Nous avons utilis ici deux cadres

- 37 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

cadre

lien :

Tk::Frame

Comment crer un cadre lgende (LabFrame) ?


Auteurs : djibril , Un cadre lgende ou LabFrame est identique un cadre. Il est ncessaire de faire appel au module Tk::LabFrame, sinon vous aurez un message d'avertissement. Par contre il est inutile de l'installer car il est prsent dans le core de Tk.
#!/usr/bin/perl use strict; use warnings; use Tk; use Tk::LabFrame; my $fenetre_principale = MainWindow->new( -title => 'Cadres' ); $fenetre_principale->minsize(300,300); my $cadre1 = $fenetre_principale->LabFrame( -label => 'Mon titre cadre', -background => '#CCCCFF', )->pack( qw/ -fill both -expand 1/ ); $cadre1->Label( -text => 'text1 cadre1' )->pack( -side => 'left'); $cadre1->Label( -text => 'text2 cadre1' )->pack( -side => 'right'); my $cadre2 = $fenetre_principale->Frame( -background => 'red', )->pack( qw/ -fill x/ ); $cadre2->Button( -text => 'quitter', -command => sub { exit;} )->pack(); MainLoop;

Nous avons utilis ici deux cadres

- 38 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

cadre

lien :

Tk::labFrame

Comment crer un cadre avec une barre de dfilement ?


Auteurs : djibril , Il est possible de crer un cadre contenant une barre de dfilement. C'est trs pratique lorsque l'on a beaucoup d'lments afficher dans une fentre. On a l'habitude d'utiliser scrolled avec les widgets Text, mais avec Frame, a ne fonctionne pas !! La solution est d'utiliser le widget Tk::Pane. Il fournit un cadre scrollable ! Il faut charger le module Tk::Pane, mais il est inutile de l'installer car il est prsent dans le core de Perl/Tk.
#!/usr/bin/perl use strict; use warnings; use Tk; use Tk::Pane; my $fenetre_principale = MainWindow->new( -title => 'Pane' ); $fenetre_principale->minsize(300,300); my $pane = $fenetre_principale->Scrolled('Pane', -scrollbars => 'sw', -sticky => 'nswe', -background => '#CCCCFF', )->pack( qw/ -fill both -expand 1/ ); $pane->Frame; $pane->Label( -text => 'text1 cadre1' )->pack( -side => 'left'); $pane->Label( -text => 'text2 cadre1' )->pack( -side => 'right'); my $cadre2 = $fenetre_principale->Frame( -background => 'red', )->pack( qw/ -fill x/ ); $cadre2->Button( -text => 'quitter', -command => sub { exit;} )->pack(); MainLoop;

- 39 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Vous remarquerez que nous utilisons l'option -sticky qui est utile si le cadre est plus grand que l'espace disponible. C'est le mme principe que le gestionnaire d'espace grid. Pensez aussi utiliser la mthode Frame. $pane->Frame;

pane

lien :

Tk::Pane

Comment garder fixe la taille d'un cadre sans redimensionnement automatique ?


Auteurs : djibril , Lorsque vous crez un cadre avec une taille donne, l'insertion de widgets l'intrieur du cadre, ce dernier radapte automatiquement sa taille en fonction du contenu. Pour dsactiver ce comportement, il faut utiliser les mthodes du gestionnaire d'espaces. Si vous utilisez pack, utiliser la mthode packPropagate avec 0 ou off en argument.
$cadre->packPropagate(0); # ou $cadre->packPropagate('off');

Si vous utilisez grid, utiliser la mthode gridPropagate avec 0 ou off en argument.


$cadre->gridPropagate(0); # ou $cadre->gridPropagate('off');

lien :

Tk::pack Tk::grid Tk::place

- 40 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Tous les widgets > Les barres de dfilement (Scrolled, Scrollbar...) Comment associer une barre de dfilement un widget ?
Auteurs : djibril , Il est possible pour la plupart des widgets de rajouter une barre de dfilement. On utilise le widget Scrolled. Ce widget est associable aux widgets Text, ROText... Voici comment utiliser ce widget :
$MonWidget = $parent->Scrolled( 'NOM WIDGET', -scrollbars => 'X', # X = n ou e ou w ou s ou on ou oe ou ow ou os # les options widget, );

NOM WIDGET = Text, ROText, Listbox, etc. -scrollbars peut prendre les valeurs n, s e, w, ns, nw, se, sw. On peut associer un o afin de rendre l'option optionnelle. La barre de dfilement n'apparat que si ncessaire. Exemple : -scrollbars => 'osoe', les deux barres gauche et en bas apparatront si ncessaire. Les options du widget = Ce sont les options du widget 'NOM WIDGET'. Voici un exemple complet
#!/usr/bin/perl use strict; use warnings; use Tk; my $fenetre_principale = MainWindow->new( -title => 'Text' ); my $widget_texte = $fenetre_principale->Scrolled('Text', -scrollbars => 'osoe', -background => '#F3EFFF', )->pack( ); for (1..100) { $widget_texte->insert('end', "$_ : Ligne $_ : exemple\n"); } MainLoop;

Voil, on voit bien que la barre de dfilement du bas ne s'affiche pas.

- 41 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Scrolled

- 42 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Tous les widgets > Les onglets (NoteBook) Comment crer des onglets ?
Auteurs : djibril , Pour crer des onglets, il faut utiliser le widget NoteBook. Pour cela, il est ncessaire d'appeler le module Tk::NoteBook dans votre script. Il est install avec le module Tk. Vous devez dans un premier temps crer un bloc-notes. C'est le cadre sur lequel doivent tre positionns les onglets.
my $blocnote = $fenetre_parent->NoteBook();

Ensuite, il suffit de crer les onglets ncessaires.


my $onglet1 = $blocnote->add('NomOnglet', -label => 'onglet 1');

Chaque onglet doit avoir un nom qui lui sera unique. Maintenant, sur chaque onglet, vous pouvez faire ce que vous voulez, comme crer un cadre ou un bouton. Voici un exemple :
#!/usr/bin/perl use strict; use warnings; use Tk; use Tk::NoteBook; my $fenetre_principale = MainWindow->new( -title => 'onglet', -background => 'yellow', ); $fenetre_principale->minsize ( 300, 300); $fenetre_principale->Label ( -text => "exemple d'onglets",)->pack(); # blocnote my $blocnote = $fenetre_principale->NoteBook( -backpagecolor => 'white', -inactivebackground => 'pink', )->pack( qw/-fill both -expand 1/ ); # onglets my $onglet1 = $blocnote->add('onglet1', -label => 'onglet 1',); my $onglet2 = $blocnote->add('onglet2', -label => 'onglet 2',); $onglet1->Label( -text => 'texte onglet 1',)->pack(); $onglet2->Label( -text => 'texte onglet 2',)->pack(); $fenetre_principale->Button ( -text => 'Bouton fermeture', -command => sub { exit; }, )->pack();

MainLoop;

- 43 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

rsultat

lien :

Tk::NoteBook

Comment modifier la couleur de fond d'un onglet ?


Auteurs : djibril , Vous avez sans doute remarqu qu'il est impossible de mettre une couleur de fond avec l'option -background lorsque l'on cre un onglet avec la mthode add. Prenons par exemple ce code. Voici un exemple :
#!/usr/bin/perl use strict; use warnings; use Tk; use Tk::NoteBook; my $fenetre_principale = MainWindow->new( -title => 'onglet', -background => 'yellow', ); $fenetre_principale->minsize ( 300, 300); $fenetre_principale->Label ( -text => "exemple d'onglets",)->pack(); # blocnote my $blocnote = $fenetre_principale->NoteBook( -background => 'red', -backpagecolor => 'white', -inactivebackground => 'pink', )->pack( qw/-fill both -expand 1/ ); # onglets my $onglet1 = $blocnote->add('onglet1', -label => 'onglet 1', ); my $onglet2 = $blocnote->add('onglet2', -label => 'onglet 2',); $onglet1->Label( -text => 'texte onglet 1',)->pack(); $onglet2->Label( -text => 'texte onglet 2',)->pack(); $fenetre_principale->Button ( -text => 'Bouton fermeture', -command => sub { exit; }, )->pack();

- 44 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Voici un exemple :
MainLoop;

rsultat Si vous essayez de mettre l'onglet 1 en vert ainsi


my $onglet1 = $blocnote->add('onglet1', -label => 'onglet 1', -background => 'green');

vous obtiendrez le message d'erreur suivant : Bad option `-background' at C:/Perl/site/lib/Tk.pm line 250.. Normal, cette option n'est pas disponible ! Lisez la documentation de Tk::NoteBook ! Nanmoins, il y a une parade toute simple. La mthode add retourne un objet de type Frame. Il suffit de le rcuprer et d'y appliquer les options dont on a besoin (option de Tk::Frame).
my $onglet1 = $blocnote->add('onglet1', -label => 'onglet 1',); $onglet1->configure( -background => 'green',);

Voici maintenant ce que l'on obtient.

- 45 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

rsultat Gnial non ?!!

lien : lien :

Tk::NoteBook Tk::Frame

- 46 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Tous les widgets > Les menus (Menu, Menubutton...) Comment crer un menu principal pour sa fentre ?
Auteurs : djibril , Pour crer un menu principal (menubar) sa fentre (widget de premier niveau), on utilise la mthode Menu de MainWindows. Le menu sera cr automatiquement en haut de la fentre et on ne peut avoir qu'un seul menu par fentre. Il sera ensuite possible de crer des sous-menus, de mettre des sparateurs entre ses menus, etc. Voici un code d'exemple :
#!/usr/bin/perl use strict; use warnings; use Tk; my $main = MainWindow->new( -title => 'Menu', ); $main->minsize( 250, 150 ); #======================== # Menu de l'application #======================== my $menu_bar = $main->Menu( -type => "menubar", ); $main->configure( -menu => $menu_bar, ); # menu fichier avec sous-menu my $menu_fichier = $menu_bar->cascade( -label => 'Fichier', -tearoff => 0, ); $menu_fichier->command( -label => 'sous-menu fichier 1', ); $menu_fichier->command( -label => 'sousmenu fichier 2', -image => $main->Getimage("openfile"), -compound => "left"); $menu_fichier->command( -label => 'sous-menu fichier 3', ); $menu_fichier->command( -label => 'sous-menu fichier 4', ); my $cascade1 = $menu_fichier->cascade( -label => 'cascade 1', -tearoff => 0, ); $cascade1->command( -label => 'test', ); $menu_fichier->separator; $menu_fichier->command( -label

=> 'Quitter', -command => sub { exit;} );

# menu aide avec sous-menu my $menu_aide = $menu_bar->cascade( -label => 'Aide', -tearoff => 0, ); $menu_aide->command( -label => 'sous-menu aide 1', ); $menu_aide->command( -label => 'sous-menu aide 2', ); # menu TOTO sans sous-menu $menu_bar->command( -label

=> 'TOTO', );

$main->Button( -text => 'Quitter', -command => sub {exit;}, )->pack( qw/ -pady 10 / ); MainLoop;

Voici le rsultat obtenu :

- 47 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Menu principal Il est aussi possible d'utiliser le widget Menubutton. Mais il est moins adapt dans un contexte de menu principal.

lien :

Tk::Menu

Comment crer un bouton de menu ?


Auteurs : djibril , Si l'on souhaite faire apparatre un menu lorsque l'on clique sur un bouton, il faut utiliser le widget Menubutton. Ce widget permet de crer un menu droulant qui peut contenir des sous-menus, des boutons radio (avec cases cocher). Le principe est le suivant : vous cliquez sur le bouton et le menu apparat. Ce dernier disparat une fois votre choix effectu ou bien si vous cliquez en dehors du menu. Certains programmeurs utilisent les boutons de menu pour crer un menu principal. Ils les mettent cote cote dans un cadre (Widget Frame). C'est une technique comme une autre. Crer un bouton de menu est trs simple. Il suffit d'utiliser le widget Menubutton de la sorte :
$widget_principal->Menubutton( -text => 'Mon premier bouton de menu',)->pack;

Voici le code complet


#!/usr/bin/perl use warnings; use strict; use Tk; # Cration du widget principal my $widget_principal = new MainWindow( -title => 'Apprentissage bouton de menu', -background => "white", ); $widget_principal->minsize( 200, 200 ); my $menu_boutton = $widget_principal->Menubutton( -text => 'Mon premier bouton de menu', -relief => 'solid', )->pack; MainLoop;

A ce stade, vous avez un bouton plat qui apparat. Mais rien n'est fonctionnel. Pour changer l'aspect du bouton, il vous suffit de configurer les options ncessaires. Le but est d'associer un menu notre bouton, pour cela, il faut utiliser l'option -menuitems ou -menu. L'option menuitems permet de crer un menu au moment de la cration de bouton de menu. Nous utiliserons cette option dans nos exemples. Si vous optez pour l'option -menu, vous devrez lui associer un menu cr au pralable.
- 48 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Crons un menu avec plus d'lments.


#!/usr/bin/perl use warnings; use strict; use Tk; # Cration du widget principal my $widget_principal = new MainWindow( -title => 'Apprentissage bouton de menu', -background => "white", ); $widget_principal->minsize( 200, 200 ); my $menu_boutton = $widget_principal->Menubutton( -text => 'Mon premier bouton de menu', -relief => 'solid', -menuitems => [ [ 'command', => 'un' ], [ 'command', => 'deux' ], '-', # sparateur [ 'command', => 'trois' ], [ 'command', => 'quatre' ], ], )->pack; MainLoop;

On obtient ceci :

Boutton de menu Actuellement, lorsque l'on clique sur un lment du menu, rien ne se produit. Affichons un texte chaque clic sur le menu.
#!/usr/bin/perl use warnings; use strict; use Tk; # Cration du widget principal my $widget_principal = new MainWindow( -title => 'Apprentissage bouton de menu', -background => "white", ); $widget_principal->minsize( 200, 200 ); my $menu_boutton = $widget_principal->Menubutton( -text => 'Mon premier bouton de menu', -relief => 'solid',

- 49 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

-menuitems => [ [ 'command', => 'un', -command => [ [ 'command', => 'deux', -command => [ '-', # sparateur [ 'command', => 'trois', -command => [ 'command', => 'quatre', -command => ], )->pack; MainLoop; sub affichage { my ($argument) = @_; print "=> $argument\n"; return; }

\&affichage, 'un' ] ], \&affichage, 'deux' ] ], [ \&affichage, 'trois' ] ], [ \&affichage, 'quatre' ] ],

A chaque fois que vous cliquerez sur 'un' par exemple, le texte "=> un" sera affich sur la console. Pour cela, on a utilis l'option -command que l'on a associe une procdure nomme 'affichage' dont le but est d'afficher l'argument reu. Essayons prsent de rajouter un cinquime lment. De plus, nous allons donner la possibilit l'utilisateur du script de pouvoir choisir une langue, de choisir une tranche d'ge. Pour ce faire, nous utiliserons la mthode AddItems, crerons des sous-menus et ferons appel des radiobutton et checkbutton. Voici le rsultat attendu :

Bouton de menu complet Pour ajouter d'autres lments au menu, nous avons le choix entre deux mthodes : command et AddItems. Les deux mthodes fonctionnent bien. Utilisation de deux mthodes pour ajouter de nouveaux lments
$menu_boutton->AddItems( [ 'command' => 'cinq', -command => [ \&affichage, 'cinq' ], ] ); $menu_boutton->command( -label => 'six', -command => [ \&affichage, 'six' ], );

Pour crer un sous-menu, utilisons la mthode cascade. sous-menu langue et ge


my $menu_langue = $menu_boutton->cascade( -label => 'Vous parlez la langue ?', -tearoff => 0, ); my $menu_age = $menu_boutton->cascade( -label => "Votre tranche d'ge ?", -tearoff => 0, );

- 50 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Crons maintenant nos diffrents menus. Voici le code complet.


#!/usr/bin/perl use warnings; use strict; use Tk; # Cration du widget principal my $widget_principal = new MainWindow( -title => 'Apprentissage bouton de menu', -background => "white", ); $widget_principal->minsize( 200, 200 ); my $menu_boutton = $widget_principal->Menubutton( -text => 'Mon premier bouton de menu', -relief => 'solid', -menuitems => [ [ 'command', => 'un', -command => [ \&affichage, 'un' ] ], [ 'command', => 'deux', -command => [ \&affichage, 'deux' ] ], '-', # sparateur [ 'command', => 'trois', -command => [ \&affichage, 'trois' ] ], [ 'command', => 'quatre', -command => [ \&affichage, 'quatre' ] ], ], )->pack; # rajoutons un lment dans le menu $menu_boutton->AddItems( [ 'command' => 'cinq', -command => [ \&affichage, 'cinq' ], ] ); $menu_boutton->command( -label => 'six', -command => [ \&affichage, 'six' ], ); $menu_boutton->separator; # Langue my $menu_langue = $menu_boutton->cascade( -label => 'Vous parlez la langue ?', -tearoff => 0, ); my ( $chinois, $anglais, $francais ); $menu_langue->checkbutton( -label => 'chinoise', -variable => \$chinois, -command => sub { print "Langue chinoise\n"; } ); $menu_langue->checkbutton( -label => 'anglaise', -variable => \$anglais, -command => sub { print "Langue anglaise\n"; } ); $menu_langue->checkbutton( -label => 'franaise', -variable => \$francais, -command => sub { print "Langue franaise\n"; } ); # Ma tranche d'ge my $menu_age = $menu_boutton->cascade( -label => "Votre tranche d'ge ?", -tearoff => 0, ); my $tranche_age; $menu_age->radiobutton( -label => 'mineur', -value => 'mineur', -variable => \$tranche_age, -command => sub { print "Tranche d'ge $tranche_age\n"; } ); $menu_age->radiobutton(

- 51 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

-label -value -variable -command ); MainLoop;

=> => => =>

'majeur', 'majeur', \$tranche_age, sub { print "Tranche d'ge $tranche_age\n"; }

sub affichage { my ($argument) = @_; print "=> $argument\n"; return; }

Voil !!

lien : lien : lien :

Tk::Menubutton Tk::Menu::Item Tk::Menu

Comment crer un menu d'options ?


Auteurs : djibril , Il existe une autre mthode pour crer un bouton de menu trs simple en utilisant le widget Optionmenu, c'est un menu d'options. Il vous permet de crer un menu droulant via un clic sur un bouton. Sa mise en place est trs simple. Il n'est pas possible de crer des sous-menus. Voici un exemple :
#!/usr/bin/perl use warnings; use strict; use Tk; use utf8; my $mw = MainWindow->new(); my ( $var, $tvar ); my $option_menu = $mw->Optionmenu( -options => [ [ Janvier => 1 ], [ Fvrier => 2 ], [ Mars => 3 ], [ Avril => 4 ], [ Mai => 5], [ Juin => 6 ], [ Juillet => 7 ], [ Aot =>8 ], [ Septembre => 9 ], [ Octobre => 10 ], ], -command => sub { print "choix : ", @_, "\n" }, -variable => \$var, -textvariable => \$tvar )->pack; $option_menu->addOptions( [ 'Novembre' => 11 ], [ 'Dcembre' => 12 ], ); my $cadre = $mw->Frame( -relief $cadre->Label( -text => $cadre->Label( -textvariable => $cadre->Label( -textvariable => => 'groove', -borderwidth => 2 ,-pady => 10)->pack; 'Votre choix : ' )->pack( -side => 'left' ); \$tvar )->pack( -side => 'left', ); \$var )->pack( -side => 'left' );

$mw->Button( -text => 'Fermer', -command => sub { $mw->destroy } )->pack;

- 52 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

MainLoop;

Rsultat :

OptionMenu Ce widget ne contient qu'une seule mthode et quatre options. Voir la documentation pour en savoir plus.

lien :

Tk::Optionmenu

Comment crer un menu qui surgit aprs un clic souris dans un widget ?
Auteurs : djibril , Il peut souvent tre ncessaire de vouloir crer un menu qui apparat lorsque l'on clique sur un bouton de la souris. Pour ce faire, on utilise la mthode classique de cration de menu, on utilise le widget Menu. Pour crer le menu, une seule ligne de code suffit
$widget->Menu(...Les options...);

Toutes les options sont disponibles dans la documentation du widget Menu. Voici une liste de ces options.

- 53 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Option -activebackground -activeborderwidth -activeforeground -background -borderwidth -cursor -disabledforeground -font -foreground -menuitems -postcommand -relief -selectcolor

Valeur couleur entier couleur couleur entier nom couleur nom couleur liste rfrence d'une fonction 'flat', 'groove'... couleur

-takefocus

0 ou 1 ou undef

-tearoff

0 ou 1

Explication Couleur de fond derrire l'entre active du menu Largeur du contour de l'entre active Couleur du texte de l'entre active Couleur de fond du menu Largeur du contour du menu Nom du curseur Couleur du texte d'une entre dsactive Fonte des textes du menu Couleur du texte d'une entre du menu Liste d'entres du menu cr Fonction de rappel invoque avant que le menu ne s'ouvre Aspect des contours du menu Couleur de la bote de slection des entres de type case cocher ou bouton radio Prcise si l'on peut parcourir le menu l'aide du clavier ou non Prcise si le menu contiendra une ligne de dtachement comme premire entre

Ensuite, pour le faire apparatre, on utilisera la mthode post ou Popup. La mthode post permet d'afficher le menu un endroit que l'on souhaite en fonction des coordonnes x et y.
$menu->post($x, $y);

La mthode Popup permet d'afficher le menu centr sur la fentre ou tout autre widget. Mais il est possible de l'ajuster au niveau du pointeur de la souris en utilisant les deux options -popover et -popanchor. Pour ajouter une entre au menu, nous pouvons utiliser la mthode add ou insert.
$menu->add(TYPE, OPTIONS); $menu->insert(INDICE, TYPE, OPTIONS)

TYPE = 'command', 'radiobutton', 'checkbutton', 'separator' ou 'cascade'. OPTIONS = les options de menuitems savoir -activebackground, -activeforeground, -accelerator, -background, -bitmap, -command, -font, -foreground, -image, -indicatoron, -label, -menu, -offvalue, -onvalue, -selectcolor, selectimage, -state, -underline, -value, -variable... INDICE = indice avant lequel l'ajout sera effectu. Ex INDICE = 'end', ou '0'. Voici un exemple pour illustrer toutes les explications ci-dessus. Code complet d'un Menu
#!/usr/bin/perl use strict; use warnings; use Tk;

- 54 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Code complet d'un Menu


use utf8; my $mw = new MainWindow( -title => 'Menu', -background => 'white', ); # Cration d'un menu popup my $menu = $mw->Menu( -tearoff => 0, -takefocus => 1, -background => "white", -menuitems => [ [ 'command', => 'un', -command => [ [ 'command', => 'deux', -command => [ '-', # sparateur [ 'command', => 'trois', -command => [ 'command', => 'quatre', -command => ], );

\&affichage, 'un' ] ], \&affichage, 'deux' ] ], [ \&affichage, 'trois' ] ], [ \&affichage, 'quatre' ] ],

# Ajouter un cinquime lment $menu->add( 'command', -label => 'cinq', -command => [ \&affichage, 'cinq' ] ); $menu->add('separator'); # Langue my $sous_menu_langue = $menu->cascade( -label => 'Vous parlez la langue ?', -tearoff => 0, ); my ( $chinois, $anglais, $francais ); $sous_menu_langue->checkbutton( -background => 'white', -label => 'chinoise', -variable => \$chinois, -command => sub { print "Langue chinoise\n"; } ); $sous_menu_langue->checkbutton( -background => 'white', -label => 'anglaise', -variable => \$anglais, -command => sub { print "Langue anglaise\n"; } ); $sous_menu_langue->checkbutton( -background => 'white', -label => 'franaise', -variable => \$francais, -command => sub { print "Langue franaise\n"; } ); # Ma tranche d'ge my $menu_cascade_age = $menu->cascade( -label => "Votre tranche d'ge ?", -tearoff => 0, ); my $tranche_age; $menu_cascade_age->radiobutton( -label => 'mineur', -value => 'mineur', -background => 'white', -variable => \$tranche_age, -command => sub { print "Tranche d'ge $tranche_age\n"; } ); $menu_cascade_age->radiobutton( -background => 'white', -label => 'majeur', -value => 'majeur',

- 55 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Code complet d'un Menu


-variable => \$tranche_age, -command => sub { print "Tranche d'ge $tranche_age\n"; } );

# afficher un Menu aprs clic droit sur la souris # Le Menu sera affich au niveau du curseur, il ne sera pas centr, # mais affich au coin suprieur gauche. $mw->Tk::bind( '<ButtonPress-3>', sub { $menu->Popup( -popover => 'cursor', -popanchor => 'nw' ); } ); MainLoop; sub affichage { my ($argument) = @_; print "=> $argument\n"; return; }

Voici le rsultat :

Menu Il vous suffit de faire un clic avec le bouton droit de la souris pour voir un menu qui apparat. Le clic droit est gr par la mthode bind. C'est une mthode interne Tk qui permet de grer les vnements. Consultez la documentation officielle pour en savoir plus.

lien : lien :

Tk::Menu Tk::bind

- 56 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Tous les widgets > Les champs de saisie (Entry...) Comment crer un champ de saisie ?
Auteurs : djibril , Pour crer un champ de saisie, il faut utiliser le widget Entry. Voici un exemple de code :
#!/usr/bin/perl use strict; use warnings; use Tk; my $fenetre_principale = MainWindow->new( -title => 'Entry' ); $fenetre_principale->Label( -text => 'Data : ')->pack( qw/ -side left/ ); my $entry = $fenetre_principale->Entry( )->pack( qw/ -side left/ ); $fenetre_principale->Button( -text => 'Afficher', -command => sub { print $entry->get,"\n"; }, )->pack( qw/ -side left/ ); MainLoop;

La fentre contient un champ de saisie. A chaque fois que l'on clique sur le bouton, le texte saisi est affich dans la console. L'information est obtenue via la mthode get. Pour rcuprer l'information saisie, il est aussi possible d'utiliser l'option -textvariable.

Entry

lien :

Tk::Entry

Comment vrifier le contenu d'un champ de saisie ?


Auteurs : djibril , Il est possible de vrifier le contenu d'un champ de saisie et d'obliger l'utilisateur de votre application de ne saisir que des chiffres. Pour cela, utilisez le module Tk::EntryCheck. C'est un widget de type Entry qui permet de vrifier le contenu du champ de saisie et sa longueur. Les options supplmentaires sont les suivantes : -maxlength => 10, # accepte 10 caractres au maximum dans le champ de saisie ; -pattern => qr/\d/, # accepte seulement des chiffres, rien d'autre. Vous devez installer le module Tk::EntryCheck.
#!/usr/bin/perl use strict; use warnings; use Tk; use Tk::EntryCheck; my $fenetre_principale = MainWindow->new( -title => 'Tk::EntryCheck' ); $fenetre_principale->Label( -text => 'Nombre : ')->pack( qw/ -side left/ ); my $entry = $fenetre_principale->EntryCheck(

- 57 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

-pattern => qr/\d/, # accepte seulement des chiffres, rien d'autre. -background => '#FFFF99', )->pack( qw/ -side left/ ); $fenetre_principale->Button( -text => 'Afficher', -command => sub { print $entry->get,"\n"; }, )->pack( qw/ -side left/ ); MainLoop;

EntryCheck

lien :

Tk::EntryCheck

Comment protger la saisie d'un mot de passe ?


Auteurs : djibril , Il faut utiliser l'option -show du widget Entry. -show => 'caractre', le message tap dans le champ de saisie sera remplac par le caractre pass -show .
#!/usr/bin/perl use strict; use warnings; use Tk; my $fenetre_principale = MainWindow->new( -title => 'Password : Entry' ); $fenetre_principale->Label( -text => 'Mot de passe : ')->pack( qw/ -side left/ ); my $entry = $fenetre_principale->Entry( -show => '*',)->pack( qw/ -side left/ ); MainLoop;

passwordentry

lien :

Tk::Entry

- 58 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Tous les widgets > Les botes de listes, menus droulant (Listbox...) Comment crer un menu droulant ?
Auteurs : djibril , Pour concevoir un menu droulant, il faut utiliser le widget BrowseEntry. Il est ncessaire d'appeler le module Tk::BrowseEntry dans votre script. Il est install avec le module Tk. BrowseEntry est une classe drive du widget Frame (d'un cadre). Toutes les mthodes et options du widget Entry sont utilisables. Si vous souhaitez rcuprer la slection de l'utilisateur, sachez juste que l'option -textvariable a t remplace par -variable. Pour en savoir plus, lisez la documentation officielle ! Voici un exemple simple d'utilisation : Tk::BrowseEntry
#!/usr/bin/perl use strict; use warnings; use Tk; use Tk::BrowseEntry; my $fenetre_principale = MainWindow->new( -title => 'menu droulant' ); 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 droulant $menu_deroulant->insert('end', 'choix3'); # label choix $fenetre_principale->Label( -textvariable => \$mon_choix, )->pack( qw/ -padx 10 -pady 10 / ); MainLoop;

La slection s'affiche en temps rel dans le l'tiquette dessous.

menu droulant

- 59 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

menu droulant2

lien :

Tk::BrowseEntry

Comment crer une bote de liste ?


Auteurs : djibril , Pour crer une bote de liste, on utilise le widget Tk::Listbox. Voici un exemple trs simple :
#!/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;

On obtient

ListboxSimple Il y a quelques mthodes connatre : Mthode insert delete Explication Permet de rajouter des lments dans la liste Permet de supprimer des lments d'une bote de liste Retourne des lments de la liste en fonction d'indice donn Elle renvoie un tableau des indices des lments slectionns Permet de slectionner une suite d'lments Exemple $liste->insert('end', element1, element2, element3...); $liste->delete('indice dbut', 'indice fin'); ou $liste->delete(indice); $liste->get('indice dbut', 'indice fin'); ou $liste->get(indice); my @indices_elt_selectionnes = $liste->curselection(); $liste->selectionSet(0,'end'); (slectionne tout)

get

curselection

selectionSet

- 60 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

selectionClear

Annuler des slections

$liste->selectionSet(0); (slectionne premier lment) $liste>selectionClear(0,'end'); (dslectionne tout)

... Pour en savoir plus, lisez la documentation officielle. Voici un exemple de script crant deux botes de liste permettant de slectionner un ou plusieurs lments d'une bote pour la passer une autre :
#!/usr/bin/perl use strict; use warnings; use Tk; # Cration d'une fentre 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 donnes $liste1->insert( 'end', qw/jasmine jedai djibril stoyak ClaudeLELOUP autre/ ); # Pr-slectionne le premier lment $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 donnes $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 lments slectionns dans la bote de liste 1 my @elt_selectionnes = $liste1->curselection(); foreach my $elt1 (@elt_selectionnes) { # insertion des lments slectionns dans la bote de liste 2 $liste2->insert( 'end', $liste1->get($elt1) ); print "\t => ", $liste1->get($elt1), "\n"; } # Suppression dans la bote de liste 1 des lments1 copis dans la bote 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 lment de la liste, les index dcrmentent. map { $liste1->delete($_) } reverse sort { $a <=> $b } @elt_selectionnes; }, );

- 61 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

my $bouton2vers1 = $fenetre_principale->Button( -text => '<<', -command => sub { print "liste 1 <= liste 2\n"; # Lecture des lments slectionns dans la bote de liste 2 my @elt_selectionnes = $liste2->curselection(); foreach my $elt2 (@elt_selectionnes) { # insertion des lments slectionns dans la bote de liste 1 $liste1->insert( 'end', $liste2->get($elt2) ); print "\t <= ", $liste2->get($elt2), "\n"; } # Suppression dans la bote de liste 2 des lments copis dans la bote 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 lment de la liste, les index dcrmentent. map { $liste2->delete($_) } reverse sort { $a <=> $b } @elt_selectionnes; }, ); # Utilisation de grid pour placer les widgets dans la fentre $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;

Rsultat :

deux botes de liste Il est possible de passer un ou plusieurs lments de la liste 1 vers la liste 2 (ou inversement) en les slectionnant, puis en cliquant sur le bouton >> ou <<.

lien :

Tk::Listbox

Comment afficher un lment de la bote de liste ?


Auteurs : djibril , Il est souvent important d'afficher le dernier lment d'une bote de liste. En fait, au fur et mesure de l'insertion de donnes dans la bote de liste, il faut manipuler la barre de dfilement pour voir le dernier lment. Pour le faire automatiquement, il faut utiliser la mthode see en lui donnant en argument l'indice de l'lment.

- 62 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

$boite_liste->see(0); # Voir le premier lment de la liste $boite_liste->see('end'); # Voir le dernier lment de la liste

- 63 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Tous les widgets > Les botes de dialogue (Dialog, DialogBox, messageBox...) Qu'est-ce qu'une bote de dialogue ?
Auteurs : djibril , Il peut tre utile d'avoir une interactivit avec l'utilisateur de votre application via un pop-up qui aura pour but de signifier une erreur, d'mettre un warning (une attention particulire), de demander une confirmation, etc. Pour ce faire, le module Tk dispose de quatre botes de dialogue standard faciles utiliser. Chacune d'elles sera illustre dans les questions ci-dessous. Notez qu'il vous est galement possible de crer vos propres pop-up via la mthode Toplevel et de l'habiller votre guise, voire mme de crer un widget composite.

lien : lien : lien : lien :

Comment crer une bote de dialogue avec messageBox ? Comment crer une bote de dialogue avec MsgBox ? Comment crer une bote de dialogue avec DialogBox ? Comment crer une bote de dialogue avec Dialog ?

Comment crer une bote de dialogue avec messageBox ?


Auteurs : djibril , Pour crer une bote de dialogue messageBox, il faut utiliser la mthode messageBox interne Tk. messageBox n'est pas un widget composite comme les autres botes de dialogue : vous n'aurez pas besoin de faire appel un module particulier. Voici un exemple illustrant son utilisation :
#!/usr/bin/perl use warnings; use strict; use Tk; my $mw = new MainWindow( -title => "Boite de dialogue", ); $mw->minsize( 300,100 ); my $reponse = $mw->Button( -text => 'messageBox', -command => sub { my $reponse_messageBox = $mw->messageBox( -icon => 'info', -title => 'Mon titre', -type => 'OK', -message => 'Ma boite de dialogue messageBox', ); } )->pack( qw/ -padx 10 -pady 10 / );

MainLoop;

- 64 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

messageBox sous Windows Vista L'aspect de la fentre est dpendant de votre systme d'exploitation. A ce jour, il est impossible de modifier la couleur de fond de la fentre, du bouton, de changer l'icne du pop-up, ce qui peut tre un inconvnient. $reponse_messageBox contient la rponse de l'utilisateur. Dans notre cas, elle sera gale Ok si l'utilisateur clique sur le bouton OK. Elle aurait pu tre gale Cancel si l'on avait mis -type 'OKCANCEL' et cliqu sur le bouton annuler. L'option -icon permet de spcifier le type d'image qui sera affiche la gauche du message ; L'option -type permet de spcifier le type de bouton. Les choix sont : 'AbortRetryIgnore', 'Ok', 'OkCancel', 'RetryCancel', 'YesNo' or 'YesNoCancel'.

Pour plus d'informations, regardez la documentation officielle.

lien :

messageBox

Comment crer une bote de dialogue avec MsgBox ?


Auteurs : djibril , Pour crer une bote de dialogue MsgBox, il faut utiliser le module Tk::MsgBox. Inutile de chercher l'installer si Tk l'est car il fait partie du core de Tk. Voici un exemple illustrant son utilisation :
#!/usr/bin/perl use warnings; use strict; use Tk; use Tk::MsgBox; my $mw = new MainWindow( -title => "Boite de dialogue", ); $mw->minsize( 300,100 ); $mw->Button( -text => 'MsgBox', -command => sub { my $msgbox = $mw->MsgBox( -title => 'Mon titre', -type => 'okcancel', -message => 'Ma boite de dialogue okcancel', ); my $reponse = $msgbox->Show; print "Reponse : $reponse\n"; }

- 65 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

)->pack( qw/ -padx 10 -pady 10 / ); MainLoop;

MsgBox sous Windows Vista L'aspect de la fentre est dpendant de votre systme d'exploitation. A ce jour, il est impossible de modifier la couleur de fond de la fentre, du bouton, de changer l'icne, ce qui peut tre un inconvnient. $reponse contient la rponse de l'utilisateur. Dans notre cas, elle sera gale OK ou CANCEL en fonction du clic de l'utilisateur. L'option -icon permet de spcifier le type d'image qui sera affiche la gauche du message ; L'option -type permet de spcifier le type de bouton. Les choix sont : abortretryignore, ok, okcancel, retrycancel, yesno ou yesnocancel ; L'option -detail permet de spcifier un message supplmentaire.

Pour plus d'informations, regardez la documentation officielle.

lien :

Tk::MsgBox

Comment crer une bote de dialogue avec DialogBox ?


Auteurs : djibril , Pour crer une bote de dialogue DialogBox, il faut utiliser le module Tk::DialogBox. Inutile de chercher l'installer si Tk l'est car il fait partie du core de Tk. C'est un widget composite (module Tk issu d'un autre widget). On peut dans cette bote de dialogue rajouter d'autres widgets, ce qui nous laisse une plus grande marge de man#uvre pour le design de notre bote de dialogue. Nous pouvons galement mettre le texte que l'on veut dans nos boutons et surtout les configurer pour changer leur couleur via la mthode Subwidget par exemple. Voici un exemple illustrant son utilisation.
#!/usr/bin/perl use warnings; use strict; use Tk; use Tk::DialogBox; my $mw = new MainWindow( -title => "Boite de dialogue", ); $mw->minsize( 300,100 ); $mw->Button(

- 66 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

-text => 'DialogBox', -command => [\&BoiteDialogBox, $mw], )->pack( qw/ -padx 10 -pady 10 / ); MainLoop; sub BoiteDialogBox { my $widget = shift; my $dialog_box = $widget->DialogBox( -title => 'Question !!', -buttons => ["Pourquoi pas ?", "Oui", "Non merci", "Jamais"], -background => '#CCCCFF', -default_button => 'Oui', ); # Rajout d'un label $dialog_box->Label( -text => "Voulez-vous apprendre Perl/Tk ?", -background => '#CCCCFF', )->pack(); # Configuration des boutons $dialog_box->Subwidget("B_Oui")->configure( -background => '#68C963', ); $dialog_box->Subwidget("B_Non merci")->configure( -background => '#CF0063', ); $dialog_box->Subwidget("B_Jamais")->configure( -background => 'red', ); my $reponse = $dialog_box->Show(); print "Reponse : $reponse\n"; }

DialogBox sous Windows Vista Comme vous pouvez le constater, il est possible de configurer notre bote de dialogue et de l'habiller plus sympathiquement par rapport aux autres botes de dialogue (MsgBox et messageBox). $reponse contient la rponse de l'utilisateur. Dans notre cas, elle sera gale Pourquoi pas ?, Oui, Non merci ou Jamais en fonction du clic de l'utilisateur. Notez l'usage de Subwidget pour obtenir la rfrence du widget Button voulu. Dans la documentation officielle, il est stipul d'crire $dialog_box->Subwidget("B_TEXTEBOUTON") pour obtenir la rfrence du bouton afin de la configurer souhait.

- 67 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Pour plus d'informations, regardez la documentation officielle.

lien :

Tk::DialogBox

Comment crer une bote de dialogue avec Dialog ?


Auteurs : djibril , Pour crer une bote de dialogue Dialog, il faut utiliser le module Tk::Dialog. Inutile de chercher l'installer si Tk l'est car il fait partie du core de Tk. C'est un widget composite (module Tk issu d'un autre widget Tk::DialogBox). Tout ce qui a t expliqu pour Tk::DialogBox est applicable ce module. Voici un exemple illustrant son utilisation.
#!/usr/bin/perl use warnings; use strict; use Tk; use Tk::Dialog; my $mw = new MainWindow( -title => "Boite de dialogue", ); $mw->minsize( 300,100 ); $mw->Button( -text => 'Dialog', -command => [\&BoiteDialogMsgBox, $mw], )->pack( qw/ -padx 10 -pady 10 / ); MainLoop; sub BoiteDialogMsgBox { my $widget = shift; my $dialog = $widget->Dialog( -title => 'Question !!', -buttons => [ 'Pourquoi pas ?', 'Oui', 'Non merci', 'Jamais' ], -background => '#CCCCFF', -text => "Voulez-vous apprendre Perl/Tk ?", ); # Configuration des boutons $dialog > Subwidget("B_Oui")->configure( -background => '#68C963', ); $dialog > Subwidget("B_Non merci")->configure( -background => '#CF0063', ); $dialog > Subwidget("B_Jamais")->configure( -background => 'red', ); my $reponse = $dialog->Show(); print "Reponse : $reponse\n"; }

- 68 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Dialog sous Windows Vista Comme vous pouvez le constater, il est possible de configurer notre bote de dialogue et de l'habiller plus sympathiquement compar aux autres botes de dialogue (MsgBox et messageBox). $reponse contient la rponse de l'utilisateur. Dans notre cas, elle sera gale Pourquoi pas ?, Oui, Non merci ou Jamais en fonction du clic de l'utilisateur. Notez l'usage de Subwidget pour obtenir la rfrence du widget Button voulu. Dans la documentation officielle, il est stipul d'crire $DialogBox->Subwidget("B_TEXTEBOUTON") pour obtenir la rfrence du bouton afin de la configurer souhait. A la diffrence de Tk::DialogBox, il y a une option -text permettant de spcifier son texte. Pour plus d'informations, regardez la documentation officielle.

lien :

Tk::Dialog

- 69 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Tous les widgets > Les barres de progressions (Scale, ProgressBar...) Comment crer une barre de progression ?
Auteurs : djibril , Crer une barre de progression est trs simple en Perl/Tk. Il existe deux modules vous le permettant. Tk::ProgressBar

Ce module est dj dans le core de Tk, si vous avez install Tk, vous n'avez pas besoin de l'installer. Tk::ProgressBarPlus

Ce module n'est pas dans le core de Tk, de ce fait, son installation est ncessaire et entrainera l'installation du package Tk-MK. Voici un exemple de programme regroupant ces deux modules :
#!/usr/bin/perl use strict; use warnings; use Tk; use Tk::ProgressBar; use Tk::ProgressBarPlus; my $mw = new MainWindow( -title => 'Barre de progression', -background => 'white', ); $mw->Label( -text => "Utilisation de Tk::ProgressBar", -background => 'white', )->pack(qw / -pady 10 /); my $progress -from => -to => -length => -width => -colors => )->pack(qw / = $mw->ProgressBar( 0, 100, 200, 20, [ 0, 'blue', ], -pady 10 /);

$mw->Label( -text => "Utilisation de Tk::ProgressBarPlus", -background => 'white', )->pack(qw / -pady 10 /); my $progressplus = $mw->ProgressBarPlus( -from => 0, -to => 100, -length => 200, -width => 20, -colors => [ 0, '#2BA191', ], # Nouvelles options -showvalue => '1', -valuecolor => 'white', -valueformat => '%s %%', -font => '9x15', )->pack(qw / -pady 10 /); # Faisons dfiler les barres de progression for ( my $i = 0; $i <= 100; $i = $i + 5 ) { $progress->value($i); $progressplus->value($i); $mw->update(); sleep 1; } - 70 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

MainLoop;

Voici le rsultat de ce programme :

Barres de progression Comme vous avez pu le constater, la diffrence entre ces deux modules rside dans la possibilit d'associer une barre de progression un texte contenant le pourcentage d'avancement de la barre. Les options de Tk::ProgressBarPlus sont les mmes que celles de Tk::ProgressBar avec en plus quatre options. Les quatre options supplmentaires de Tk::ProgressBarPlus : 1 -showvalue pour activer l'affichage de la valeur de pourcentage ; 2 -valuecolor pour donner la couleur du texte ; 3 -font pour donner le fonte du texte ; 4 -valueformat pour le format du texte.

lien : lien :

Tk::ProgressBar Tk::ProgressBarPlus

- 71 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Tous les widgets > Les tableaux Comment crer un tableau ?
Auteurs : djibril , Pour crer des tableaux (c'est--dire des grilles ou classeurs) en Perl/Tk, il est possible de le faire soi-mme en utilisant le gestionnaire d'espace grid, mais c'est assez (voire trs) compliqu en fonction de ses besoins. Nanmoins, le CPAN comme d'habitude, nous offre dj des modules nous facilitant la vie. Tk::Table

Ce module est simple d'utilisation et dj prsent dans le core de Tk, donc pas besoin de l'installer si Tk l'est. Dans chaque cellule, on peut mettre un widget de notre choix. Son inconvnient est qu'il est trs trs consommateur de mmoire et pour de gros tableaux, il n'est pas adapt. De plus, il est impossible de redimensionner la largeur des colonnes via la souris. Mais n'hsitez tout de mme pas l'utiliser pour de simples tableaux.

Tk::Table Tk::GridColumns

Il est simple pour la gnration de tableaux avec des cellules de type texte. Il permet d'y mettre un entte et en plus, nous avons la possibilit de grer le tri via un clic sur l'entte. La grille peut galement tre ditable. Son utilisation ncessite son installation.

Tk::GridColumns

- 72 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Tk::MListbox

Ce module est dj plus intressant (pour les cellules de type texte) car en plus de l'entte, il permet de redimensionner automatiquement les colonnes et de paramtrer le tri via un clic sur le bouton d'une colonne d'entte. Sa mise en place n'est tout de mme pas vidente et son utilisation ncessite son installation.

Tk::MListbox Tk::TableMatrix

Ce module bien que ncessitant son installation, est le plus intressant, efficace, complet et performant. Ecrit en C, ce module est trs rapide mme pour des tableaux volumineux. De plus, il est vraiment complet et configurable souhait. Dans chaque cellule, on peut mettre du texte ou des widgets. Les tris et la fusion de cellules sont galement possibles. Le redimensionnement des colonnes et des lignes, ainsi que la cration d'entte sur une ou plusieurs lignes ou colonnes sont faisables. On peut crer un vrai classeur ditable. Ce module contient un rpertoire dmo dans lequel il y a des programmes d'exemples. Voici un code illustrant ce que l'on peut faire.
#!/usr/bin/perl use warnings; use strict; use Tk; use Tk::TableMatrix; use utf8; my $mw = MainWindow->new( -title => 'Tableau TableMatrix', -background => 'snow', ); $mw->Label( -text => "Tableau redimensionnable l'aide de TableMatrix", -background => 'snow', -font => '{arial} 12 bold' )->pack( -pady => 5 ); my $data = {}; # Cration du tableau avec une ligne et une colonne my $table = $mw->Scrolled( 'TableMatrix', -rows => 1, -cols => 1, -width => 500, -height => 500, -variable => $data,

- 73 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

-rowtagcommand -background -titlerows -titlecols -drawmode -selectmode -scrollbars );

=> => => => => => =>

\&type_row, "#454545", 1, 1, 'single', 'extended', 'osoe',

# Insertion de donnes dans le tableau for my $row ( 0 .. 20 ) { # Calcul du nombre de lignes dans le tableau my $number_rows = $table->cget( -rows ); # Insertion d'une ligne si ncessaire $table->insertRows( 'end', 1 ) if ( $number_rows < $row + 1 ); for my $col ( 0 .. 10 ) { # Calcul du nombre de lignes dans le tableau my $number_cols = $table->cget( -cols ); # Insertion d'une colonne si ncessaire $table->insertCols( 'end', 1 ) if ( $number_cols < $col + 1 ); # Ligne de titre if ( $row == 0 and $col != 0 ) { $data->{"$row,$col"} = "Colonne $col"; } # Colonne de titre elsif ( $col == 0 and $row != 0 ) { $data->{"$row,$col"} = "Ligne $row"; } elsif ( $col == 0 and $row == 0 ) { # rien ne se passe; } # Donnes else { $data->{"$row,$col"} = "($row,$col)"; } } } # Configuration des lignes paires et impaires $table->tagConfigure( 'pair_row', -bg => 'white', -fg => 'black', -relief => 'sunken', -state => 'disabled' ); $table->tagConfigure( 'impair_row', -bg => '#00C0E0', -fg => 'black', -relief => 'sunken', -state => 'disabled' ); $table->tagConfigure( 'title', -bg => '#F0E0FF', -fg => 'black', -relief => 'sunken' ); # Fusion des cellules 1,1 1,4 $table->spans( '1,1' => '0,3' ); $table->pack(qw/ -fill both -expand 1 -padx 10 -pady 10 /); MainLoop;

- 74 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

# Permet d'assigner un tag aux lignes paires et impaires sub type_row { my $row = shift; my $tag_row = ( $row > 0 && $row % 2 == 0 ) ? "pair_row" : "impair_row"; return $tag_row; }

Voici le rsultat :

Tk::TableMatrix Je vous conseille de lire attentivement la documentation de ce module car elle est abondante. Mais l'utilisation du module est simple. Soyez donc patient !!

lien : lien : lien : lien :

Tk::Table Tk::GridColumns Tk::MListbox Tk::TableMatrix

Exemples d'utilisation de MListbox


Auteurs : djibril , Voici deux programmes issus de la documentation du module : Programme 1 du module MListbox
#!/usr/bin/perl -w ## THIS IS ONE OF THE TEST SCRIPTS THAT HANS PROVIDED WITH MLISTBOX ## It IS STILL UNDERGOING EDITS BY ME - RCS

- 75 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Programme 1 du module MListbox


## ## ## ## MListbox demonstration application. This is a simple directory browser Original Author: Hans J. Helgesen, December 1999. Modified by: Rob Seegel, to work in Win32 as well Use and abuse this code. I did - RCS

use File::stat; use Tk; use Tk::MListbox; ## Create main perl/tk window. my $mw = MainWindow->new; ## ## ## ## Create the MListbox widget. Specify alternative comparison routine for integers and date. frame, but since the "Show All" button references $ml, we have to create it now.

my %red = qw(-bg red -fg white); my %green = qw(-bg green -fg white); my %white = qw(-fg black); my $ml = $mw->Scrolled( 'MListbox', -scrollbars => 'osoe', -background => 'white', -foreground => 'blue', -textwidth => 10, -highlightthickness => 2, -width => 0, -selectmode => 'browse', -bd => 2, -relief => 'sunken', -columns => [ [ qw/-text Mode -textwidth 10/, %red ], [ qw/-text NLink -textwidth 5/, %green, -comparecmd => sub { $_[0] <=> $_[1] } ], [ qw/-text UID/, %white ], [ qw/-text GID/, %green ], [ qw/-text Size/, %red, -comparecmd => sub { $_[0] <=> $_[1] } ], [ qw/-text Mtime/, %green, -comparecmd => \&compareDate ], [ qw/-text Name/, %white ] ] ); ## Put the exit button and the "Show All" button in ## a separate frame. my $f = $mw->Frame( -bd => 2, -relief => 'groove' )->pack(qw/-anchor w -expand 0 -fill x/); $f->Button( -text => 'Exit', -command => sub {exit} )->pack(qw/-side right -anchor e/); $f->Button( -text => 'Show All', -command => sub { foreach ( $ml->columnGet( 0, 'end' ) ) { $ml->columnShow($_); } } )->pack(qw/-side left -anchor w/); # Put the MListbox widget on the bottom of the main window. $ml->pack( -expand => 1, -fill => 'both', -anchor => 'w' );

- 76 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Programme 1 du module MListbox


# Double clicking any of the data rows calls openFileOrDir() # (But only directories are handled for now...) $ml->bindRows( "<Double-Button-1>", \&openFileOrDir ); # Right-clicking the column heading creates the hide/show popup menu. $ml->bindColumns( "<Button-3>", [ \&columnPopup ] ); $ml->bindRows( '<ButtonRelease-1>', sub { my ( $w, $infoHR ) = @_; print "You selected row: " . $infoHR->{-row} . " in column: " . $infoHR->{-column} . "\n"; } ); # Start by showing the current directory. directory("."); MainLoop; #---------------------------------------------------------# sub directory { my ($dir) = @_; chdir($dir); my $pwd = `pwd`; chomp $pwd; $mw->title("Directory: $pwd"); # Empty $ml $ml->delete( 0, 'end' ); opendir( DIR, "." ) or die "Cannot open '.': $!\n"; foreach my $name ( readdir(DIR) ) { my $st = stat($name); my $mode = $st->mode; my $type = do { if ( -l $name ) { $mode = 0777; 'l'; } elsif ( -f $name ) '-'; } elsif ( -d $name ) 'd'; } elsif ( -p $name ) 'p'; } elsif ( -b $name ) 'b'; } elsif ( -c $name ) 'c'; } else { ' '; } };

my $mtime = localtime( $st->mtime );

- 77 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Programme 1 du module MListbox


$mode = $type . convMode( $st->mode ); $ml->insert( 'end', [ $mode, $st->nlink, $st->uid, $st->gid, $st->size, $mtime, $name ] ); } } # This callback is called if the user double-clicks one of the rows in # the MListbox. If the selected file is a directory, open it. # sub openFileOrDir { my @sel = $ml->curselection; if ( @sel == 1 ) { my ( $mode, $name ) = ( $ml->getRow( $sel[0] ) )[ 0, 6 ]; if ( $mode =~ m/^d/ ) { # Directory? directory($name); } } } # This callback is called if the user right-clicks the column heading. # Create a popupmenu with hide/show options. sub columnPopup { my ( $w, $infoHR ) = @_; # Create popup menu. my $menu = $w->Menu( -tearoff => 0 ); my $index = $infoHR->{'-column'}; # First item is "Hide (this column)". # $menu->add( 'command', -label => "Hide " . $w->columnGet($index)->cget( -text ), -command => sub { $w->columnHide($index); } ); $menu->add('separator'); # Create a "Show" entry for each column that is not currently visible. # foreach ( $w->columnGet( 0, 'end' ) ) { # Get all columns from $w. unless ( $_->ismapped ) { $menu->add( 'command', -label => "Show " . $_->cget( -text ), -command => [ $w => 'columnShow', $_, -before => $index ], ); } } $menu->Popup( -popover => 'cursor' ); } # Converts a # sub convMode my $mode my $result numeric file mode to the format provided by the ls command. { = shift; = '';

$result .= ( $mode & 0400 ) ? 'r' : '-'; $result .= ( $mode & 0200 ) ? 'w' : '-'; if ( $mode & 0100 ) { if ( $mode & 04000 ) { $result .= 's'; } else { $result .= 'x'; }

- 78 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Programme 1 du module MListbox


} else { $result .= '-'; } $result .= ( $mode & 040 $result .= ( $mode & 020 if ( $mode & 010 ) { if ( $mode & 02000 ) { if ( ( $mode & 02010 || ( $mode & 02030 || ( $mode & 02050 || ( $mode & 02070 { $result .= 's'; } else { $result .= 'l'; } } else { $result .= 'x'; } } else { $result .= '-'; } ) ? 'r' : '-'; ) ? 'w' : '-';

) ) ) ) )

$result .= ( $mode & 04 ) ? 'r' : '-'; $result .= ( $mode & 02 ) ? 'w' : '-'; $result .= ( $mode & 01 ) ? 'x' : '-'; return $result; } # Callback for date comparison. Expects that the dates are on the format # "day mon dd hh:mm:ss yyyy", for example "Tue Dec 7 12:13:11 1999". # sub compareDate { my ( $d1, $d2 ) = @_; convertDate($d1) cmp convertDate($d2); } sub convertDate { my ($str) = @_; my ( $wday, $mon, $day, $hour, $min, $sec, $year ) = ( $str =~ m/(\S*)\s*(\S*)\s*(\d*)\s*(\d\d):(\d\d):(\d\d)\s*(\d\d\d\d)/ ); my $month = 0; foreach (qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/) { if ( $mon eq $_ ) { last; } else { $month++; } } return sprintf( "%04d%02d%02d%02d%02d%02d", $year, $month, $day, $hour, $min, $sec ); }

Programme 2 du module MListbox


#!/usr/bin/perl -w # MListbox demonstration application. # Author: Hans J. Helgesen, December 1999.

- 79 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Programme 2 du module MListbox


# # Before March 2000: # # Please send comments, suggestions and error reports to # hans_helgesen@hotmail.com. # # From March 2000: hans.helgesen@novit.no # use Tk; use Tk::MListbox; use Tk::Pane; use DBI; my $intro = <<EOT; This is a very simple DBI application that demonstrates the use of MListbox $Tk::MListbox::VERSION. * * * * To To To To execute a query, type the query in the query window and click "GO". resize any of the columns, drag the vertical bar to the RIGHT of the column. move any of the columns, drag the column header left or right. sort the table, click on any of the column headers. A new click will reverse the sort order.

Note that this program calls MListbox->insert, MListbox->see and MListbox->update once FOR EACH ROW fetched from the database. This is not very efficient, a better approach would be to store all rows in an array, and then call MListbox->insert once when the query is done. EOT my $status = 'Idle'; # Check argument. if ( @ARGV != 3 ) { print STDERR "Usage: $0 source userid password\n"; print STDERR "Example: $0 dbi:Oracle:oradb peter secretpwd\n"; exit 1; } # Connect to the database. my $dbh = DBI->connect(@ARGV) or die "Can't connect: $DBI::errstr\n"; # Create Tk window... my $mw = new MainWindow; $mw->title("SQL $ARGV[1]\@$ARGV[0]"); $mw->Label( -text => $intro, -justify => 'left' )->pack( -anchor => 'w' ); my $f = $mw->Frame->pack( -fill => 'x', -anchor => 'w' ); my $text = $f->Scrolled( 'Text', -scrollbars => 'osoe', -width => 80, -height => 5 )->pack( -side => 'left', -expand => 1, -fill => 'both' ); $text->insert( 'end', "select * from all_objects where object_type='TABLE'" ); $f = $f->Frame->pack( -side => 'left' ); $f->Button( -text => 'Go', -command => sub { $mw->Busy( -recurse => 1 ); execSQL(); $mw->Unbusy; }

- 80 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Programme 2 du module MListbox


)->pack; $f->Button( -text => 'Clear', -command => sub { $text->delete( '0.0', 'end' ); } )->pack; $f->Button( -text => 'Exit', -command => sub { $dbh->disconnect; exit; } )->pack; # Put the MListbox in a Pane, since the MListbox don't support horizontal # scrolling by itself. # $f = $mw->Frame->pack( -fill => 'x' ); $f->Label( -text => 'Status:' )->pack( -side => 'left' ); $f->Label( -textvariable => \$status )->pack( -side => 'left' ); my $ml = $mw->Scrolled( 'MListbox', -scrollbars => 'osoe' )->pack( -expand => 1, -fill => 'both' ); MainLoop; #-------------------------------------------------------------------# sub execSQL { # Get the query from the text widget. my $sql = $text->get( '0.0', 'end' ); $status = 'Call prepare()'; $mw->update; my $sth = $dbh->prepare($sql); unless ( defined $sth ) { $text->insert( 'end', "\nprepare() failed: $DBI::errstr\n" ); return; } $status = 'Call execute()'; $mw->update; unless ( $sth->execute ) { $text->insert( 'end', "\nexecute() failed: $DBI::errstr\n" ); return; } # Query OK, delete all old columns in $ml. # $ml->columnDelete( 0, 'end' ); my $headings_defined = 0; $status = 'Call fetchrow()'; $mw->update; my $rowcnt = 0; while ( my $hashref = $sth->fetchrow_hashref ) { unless ($headings_defined) { foreach ( sort keys %$hashref ) { $ml->columnInsert( 'end', -text => $_ ); } $headings_defined = 1; } my @row = (); foreach ( sort keys %$hashref ) {

- 81 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Programme 2 du module MListbox


push @row, $hashref->{$_}; } $ml->insert( 'end', [@row] ); $ml->see('end'); $rowcnt++; $status = "$rowcnt rows fetched"; $ml->update; } $status = 'Idle'; }

lien :

Tk::MListbox

Exemples d'utilisation de TableMatrix


Auteurs : djibril , Etant donn qu'il n'est pas toujours vident de trouver les exemples fournis dans les modules du CPAN, je vous propose quelques programmes provenant de
#!/usr/bin/perl use warnings; use strict; use Tk; use Tk::TableMatrix; my $top = MainWindow->new; my $arrayVar = {}; for my $r ( 0 .. 7 ) { for my $c ( 0 .. 7 ) { $arrayVar->{"$r,$c"} = 'test'; } } my $t = $top->Scrolled( 'TableMatrix', -variable => $arrayVar, -selectmode => 'extended', -bg => 'white', -fg => 'black', ); $t->configure( -browsecmd => sub { my ( $previous_index, $current_index ) = @_; if ( $previous_index =~ m{^\d+,\d+$} ) { my $value_previous_cell = $t->get($previous_index); # check and validation if ( $value_previous_cell =~ s{^(\d+)/(\d+)$}{$1/$2/2010} ) { $t->activate($previous_index); $t->curvalue($value_previous_cell); $t->activate($current_index); } } }, ); $t->pack( -expand => 1, -fill => 'both' );

Tk::TableMatrix.

- 82 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

MainLoop;

## ## ## ## ## ## ##

buttons.tcl demonstrates the simulation of a button array ellson@lucent.com modifications made by jeff.hobbs@acm.org Mdofied by John Cerney for perl/tk

use Tk; use Tk::TableMatrix; use Data::Dumper qw( DumperX); my $top = MainWindow->new; my $tab = {}; my ( $rows, $cols ) = ( 10, 10 ); # create the table my $t = $top->Scrolled( 'TableMatrix', -rows => $rows, -cols => $cols, -titlerows => 1, -titlecols => 1, -roworigin => -1, -colorigin => -1, -colwidth => 4, -width => 8, -height => 8, -variable => $tab, -flashmode => 'off', -cursor => 'top_left_arrow', -borderwidth => 2, -state => 'disabled' ); $t->pack; # set up tags for $t->tagConfigure( $t->tagConfigure( $t->tagConfigure( the various states of the buttons 'OFF', -bg => 'red', -relief => 'raised' ); 'ON', -bg => 'green', -relief => 'sunken' ); 'sel', -bg => 'gray75', -relief => 'flat' );

# number of rows/cols

# clean up if mouse leaves the widget $t->bind( '<FocusOut>', sub { my $w = shift; $w->selectionClear('all'); }

- 83 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

); # highlight the cell under the mouse $t->bind( '<Motion>', sub { my $w = shift; my $Ev = $w->XEvent; if ( $w->selectionIncludes( '@' . $Ev->x . "," . $Ev->y ) ) { Tk->break; } $w->selectionClear('all'); $w->selectionSet( '@' . $Ev->x . "," . $Ev->y ); Tk->break; ## "break" prevents the call to TableMatrixCheckBorder } ); # mousebutton 1 toggles the value of the cell # use of "selection includes" would work here $t->bind( '<1>', sub { my $w = shift; $w->focus; my $dude = $w->curselection; my ($rc) = @{ $w->curselection }; my $var = $w->cget( -var ); if ( $var->{$rc} =~ /ON/ ) { $var->{$rc} = 'OFF'; $w->tagCell( 'OFF', $rc ); } else { $var->{$rc} = 'ON'; $w->tagCell( 'ON', $rc ); } } ); # inititialize the array, titles, and celltags for ( $i = 0; $i < $rows; $i++ ) { $tab->{"$i,-1"} = $i; for ( $j = 0; $j < $cols; $j++ ) { unless ($i) { $tab->{"-1,$j"} = $j; } $tab->{"$i,$j"} = "OFF"; $t->tagCell( 'OFF', "$i,$j" ); } } Tk::MainLoop;

## command.tcl

- 84 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

## ## This demo shows the use of the table widget's -command options ## ## jeff.hobbs@acm.org ## Converted to perl/tk by John Cerney use Tk; use Tk::TableMatrix; my ( $rows, $cols ) = ( 10, 10 ); my $top = MainWindow->new; # Sub to fill the array variable sub fill { my ( $array, $x, $y ) = @_; my ( $i, $j ); for ( $i = -$x; $i < $x; $i++ ) { for ( $j = -$y; $j < $y; $j++ ) { $array->{"$i,$j"} = "$i x $j"; } } } ## Test out the use of a callback to define tags on rows and columns sub rowSub { my $row = shift; return "OddRow" if ( $row > 0 && $row % 2 ); } sub colSub { my $col = shift; return "OddCol" if ( $col > 0 && $col % 2 ); } sub tblCmd { my ( $array, $set, $row, $col, $val ) = @_; # my @args = @_; # print "In Table Command, Args = '".join("', '",@args)."'\n"; my $index = "$row,$col"; if ($set) { $array->{$index} = $val; } else { if ( defined( $array->{$index} ) ) { return $array->{$index}; } else { return ''; } } } my $label = $top->Label( -text => "TableMatrix -command Example" ); # Label the changes with the value of currentTest my $currentText = ''; my $currentLabel = $top->Label( -textvariable => \$currentText ); # Entry that changes with the value of activeText my $activeText = ''; my $activeEntry = $top->Entry( -textvariable => \$activeText ); my $arrayVar = {}; # number of rows/cols

- 85 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

fill( $arrayVar, $rows, $cols );

# fill up the array variable

my $t = $top->Scrolled( 'TableMatrix', -rows => $rows, -cols => $cols, -width => 6, -height => 6, -titlerows => 1, -titlecols => 2, -command => [ \&tblCmd, $arrayVar ], -roworigin => -1, -colorigin => -2, -rowtagcommand => \&rowSub, -coltagcommand => \&colSub, -selectmode => 'extended', -flashmode => 'on', -variable => $arrayVar, ); $t->configure( -browsecommand => sub { my ($index) = @_; $currentText = $index; $activeText = $t->get($index); } ); $t->configure( -validate => 1, -validatecommand => sub { my ( $row, $col, $old, $new, $index ) = @_; $activeText = $new; return 1; } ); $t->configure( -selectioncommand => sub { my ( $NumRows, $Numcols, $selection, $noCells ) = @_; my @args = @_; print "In Selection Command, Args = '" . join( "', '", @args ) . "'\n"; return $selection; } ); # hideous Color definitions here: $t->tagConfigure( 'OddRow', -bg => 'orange', -fg => 'purple' ); $t->tagConfigure( 'OddCol', -bg => 'brown', -fg => 'pink' ); $t->colWidth( -2 => 7, -1 => 7, 1 => 5, 2 => 8, 4 => 14 ); $label->pack( -expand => 1, -fill => 'both' ); $currentLabel->pack( -expand => 1, -fill => 'both' ); $activeEntry->pack( -expand => 1, -fill => 'both' ); $t->pack( -expand => 1, -fill => 'both' ); Tk::MainLoop;

- 86 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

## version2.tcl ## ## This demo uses most features of the table widget ## ## jeff.hobbs@acm.org ## Converted to perl/tk by John Cerney use Tk; use Tk::TableMatrix; my ( $rows, $cols ) = ( 25, 20 ); my $top = MainWindow->new; # Sub to fill the array variable sub fill { my ( $array, $x, $y ) = @_; my ( $i, $j ); for ( $i = -$x; $i < $x; $i++ ) { for ( $j = -$y; $j < $y; $j++ ) { $array->{"$i,$j"} = "r$i,c$j"; } } } ## Test out the use of a callback to define tags on rows and columns sub colSub { my $col = shift; return "OddCol" if ( $col > 0 && $col % 2 ); } my $label = $top->Label( -text => "TableMatrix v2 Example" ); my $arrayVar = {}; fill( $arrayVar, $rows, $cols ); my $t = $top->Scrolled( 'TableMatrix', -rows => $rows, -cols => $cols, -variable => $arrayVar, -width => 6, -height => 8, -titlerows => 1, -titlecols => 2, -roworigin => -5, -colorigin => -2, -coltagcommand => \&colSub, -selectmode => 'extended', # fill up the array variable # number of rows/cols

- 87 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

-selecttitles -drawmode );

=> 0, => 'single',

my $button = $top->Button( -text => "Exit", -command => sub { $top->destroy } ); $label->pack( -expand => 1, -fill => 'both' ); $t->pack( -expand => 1, -fill => 'both' ); $button->pack( -expand => 1, -fill => 'both' ); # hideous Color definitions here: $t->tagConfigure( 'OddCol', -bg => 'brown', -fg => 'pink' ); $t->tagConfigure( 'title', -bg => 'red', -fg => 'blue', -relief => 'sunken' ); $t->tagConfigure( 'dis', -state => 'disabled' ); my $i = -1; my $first = $t->cget( -colorigin ); my $anchor; foreach $anchor (qw/ n s e w nw ne sw se c /) { $t->tagConfigure( $anchor, -anchor => $anchor ); $t->tagRow( $anchor, ++$i ); $t->set( "$i,$first", $anchor ); } $top->fontCreate( 'courier', -family => 'courier', -size => 10 ); $t->tagConfigure( 's', -font => 'courier', -justify => 'center' ); # $initWindow->Label(-image => $top->Photo(-file => Tk->findINC('Xcamel.gif')))->pack; my $perltkLogo = $top->Photo( -file => Tk->findINC('Xcamel.gif') ); $t->tagConfigure( 'logo', -image => $perltkLogo, -showtext => 1 ); $t->tagCell( 'logo', '1,2', '2,3', '4,1' ); $t->tagCell( 'dis', '2,1', '1,-1', '3,0' ); $t->colWidth(qw/ -2 8 -1 9 0 12 4 14/); $t->set( '1,1' => "multi-line\ntext\nmight be\ninteresting", '3,2' => "more\nmulti-line\nplaying\n", '2,2' => "null\0byte" ); $i = -1; # This is in the row span my $l = $top->Label( -text => "Window s", -bg => 'yellow' ); $t->windowConfigure( "6,0", -sticky => 's', -window => $l ); # This is in the row titles $l = $top->Label( -text => "Window ne", -bg => 'yellow' ); $t->windowConfigure( "4,-1", -sticky => 'ne', -window => $l ); # This will get swallowed by a span $l = $top->Label( -text => "Window ew", -bg => 'yellow' ); $t->windowConfigure( "5,3", -sticky => 'ew', -window => $l ); # This is in the col titles $l = $top->Label( -text => "Window nsew", -bg => 'yellow' ); $t->windowConfigure( "-5,1", -sticky => 'nsew', -window => $l ); $l = $t->parent->Label( -text => "Sibling l", -bg => 'orange' ); $t->windowConfigure( "5,1", -sticky => 'nsew', -window => $l ); $t->spans( '-1,-2' => '0,3', '1,2' => '0,5', '3,2' => '2,2', '6,0' => '4,0' ); Tk::MainLoop;

- 88 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

## edit_styles.pl ## ## demonstrates different edit styles within cells ## ## ewaldhei@idd.com ## This script uses tags and some logic to simulate check ## buttons, browseEntries, etc in cells. This approach is ## faster than using embedded windows, especially for large ## tables. use Tk; use Tk::TableMatrix; main(); sub main { my $top = MainWindow->new; my $_data = {}; my ( $rows, $cols ) = ( 12, 7 ); # create the table my $t = $top->Scrolled( TableMatrix => -rows => $rows, -cols => $cols, -titlerows => 1, -titlecols => 1, -width => 8, -height => 8, -colwidth => 11, -variable => $_data, -cursor => 'top_left_arrow', -borderwidth => 2, -ipadx => 15, -scrollbars => 'se', )->pack(qw/-expand 1 -fill both/); my $tm = $t->Subwidget('scrolled'); $tm->{columneditstyles} = { qw(1 readonly 2 editable 3 button 4 optionmenu 5 browseentry 6 checkbutton ) }; # set up tags for the various states of the buttons

# number of rows/cols

- 89 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

$t->tagConfigure( $t->tagConfigure( $t->tagConfigure( $t->tagConfigure(

'OFF', -bg => 'gray60', -relief 'ON', -bg => 'gray80', -relief 'sel', -bg => 'gray70', -relief 'readonly', -relief => 'groove'

=> 'raised' ); => 'sunken' ); => 'flat' ); );

my %images = define_bitmaps($top); $t->tagConfigure( 'optionmenu', -image => $images{optionmenu}, -anchor => 'e', -showtext => 1, ); $t->tagConfigure( 'browseentry', -image => $images{browseentry}, -anchor => 'e', -showtext => 1 ); $t->tagConfigure( 'checkbutton0', -image => $images{checkbutton0} ); $t->tagConfigure( 'checkbutton1', -image => $images{checkbutton1} ); $t->bind( '<Key-Escape>' => \&end_edit ); # clean up if mouse leaves the widget $t->bind( '<FocusOut>', sub { my $w = shift; $w->selectionClear('all'); $w->configure( -state => 'disabled' ); } ); # highlight the cell under the mouse $t->bind( '<Motion>', sub { my $w = shift; my $Ev = $w->XEvent; if ( $w->selectionIncludes( '@' . $Ev->x . "," . $Ev->y ) ) { Tk->break; } $w->selectionClear('all'); $w->selectionSet( '@' . $Ev->x . "," . $Ev->y ); Tk->break; ## "break" prevents the call to TableMatrixCheckBorder } ); # mousebutton 1 edits the cell (or not) appropriately $t->bind( '<1>', sub { my ($w) = @_; withdraw_edit_widgets($w); my $Ev = $w->XEvent; my ( $x, $y ) = ( $Ev->x, $Ev->y ); my $rc = $w->index("\@$x,$y"); my $var = $w->cget( -var ); my ( $r, $c ) = split( /,/, $rc ); $r && $c || return; $w->{_b1_row_col} = "$r,$c"; set_style_state($w); my $style = $w->{columneditstyles}{$c} || 'editable'; if ( $style eq 'optionmenu' || $style eq 'browseentry' ) { setup_toplevel_lbox( $w, $r, $c ); }

- 90 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

elsif ( $style eq 'button' ) { my $newval = $var->{$rc} =~ /ON/ ? 'OFF' : 'ON'; $var->{$rc} = $newval; $w->tagCell( $newval, $rc ); } elsif ( $style eq 'checkbutton' ) { $var->{$rc} = !$var->{$rc}; my $tag = $var->{$rc} ? 'checkbutton1' : 'checkbutton0'; $w->tagCell( $tag, $rc ); } } ); # replace std b1-release $t->bind( 'Tk::TableMatrix' => '<ButtonRelease-1>', \&set_style_state ); # inititialize the array, titles, and celltags for ( my $r = 0; $r < $rows; $r++ ) { for ( my $c = 0; $c < $cols; $c++ ) { my $rc = "$r,$c"; if ( !$r || !$c ) { $_data->{$rc} = $r || $tm->{columneditstyles}{$c} || ""; } else { $_data->{$rc} = $rc; my $style = $tm->{columneditstyles}{$c} || 'editable'; if ( $style eq 'readonly' ) { $t->tagCell( 'readonly', $rc ); } if ( $style eq 'optionmenu' ) { $_data->{$rc} = "$r options"; $t->tagCell( 'optionmenu', $rc ); } elsif ( $style eq 'browseentry' ) { $_data->{$rc} = "browse$r"; $t->tagCell( 'browseentry', $rc ); } elsif ( $style eq 'button' ) { $_data->{$rc} = $r % 4 ? 'ON' : 'OFF'; $t->tagCell( $_data->{$rc}, $rc ); } elsif ( $style eq 'checkbutton' ) { $_data->{$rc} = $r % 3 ? 0 : 1; $t->tagCell( 'checkbutton' . $_data->{$rc}, $rc ); } } } } Tk::MainLoop; } sub set_style_state { my ($w) = @_; my ( $r, $c ) = split( /,/, $w->{_b1_row_col} ); if ( grep( !$w->{columneditstyles}{$c} || $_ eq $w->{columneditstyles}{$c}, qw(optionmenu readonly button checkbutton) ) ) { $w->selectionClear('all'); $w->configure( state => 'disabled' ); } else { $w->configure( state => 'normal' ); $w->activate( $w->{_b1_row_col} ); } }

- 91 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

sub end_edit { my ($w) = @_; $w->configure( -state => 'disabled' ); $w->selectionClear('all'); } sub setup_toplevel_lbox { my ( $w, $r, $c ) = @_; my $toplevel = $w->{toplevel} ||= $w->Toplevel( -bd => 2, -relief => 'raised' ); my $lbox = $toplevel->{lbox}; $lbox->destroy() if $lbox; $toplevel->overrideredirect(1); my @options = map( chr( ord('A') + $_ - 1 ) x $_, 1 .. $r ); my $height = @options > 8 ? 8 : ( @options || 1 ); my $width = 2; foreach (@options) { $width = length($_) if length($_) > $width; } $lbox = $toplevel->{lbox} = $toplevel->Scrolled( Listbox => -height => $height, -width => $width + 1, -relief => 'raised', -borderwidth => 1, -highlightthickness => 0, -bg => $w->cget('bg'), -scrollbars => 'oe', )->pack( -side => 'left' ); $lbox->Subwidget('scrolled')->{_table_matrix} = $w; $lbox->delete( 0, 'end' ); $lbox->insert( 0, @options ); my ( $gx, $gy ) = ( $w->rootx(), $w->rooty() ); my @bbox = $w->bbox("$r,$c"); my ( $mx, $my ) = ( int( $gx + $bbox[0] + $bbox[2] ), int( $gy + $bbox[1] ) ); my $toplevel_ypixels = $height * $bbox[3] + $toplevel->cget("-bd") * 2 + $toplevel->cget("-highlightthickness"); my $y2 = $my + $toplevel_ypixels; $my = $w->vrootheight - $toplevel_ypixels if ( $y2 > $w->vrootheight ); $toplevel->transient( $w->toplevel() ); $toplevel->geometry("+$mx+$my"); $toplevel->deiconify(); $toplevel->raise(); $lbox->bind( '<ButtonRelease-1>', sub { my ($lbox) = @_; my $i = $lbox->curselection(); my $val = $lbox->get($i); my $w = delete $lbox->{_table_matrix}; my $rc = delete $w->{_b1_row_col}; my $var = $w->cget( -var ); $var->{$rc} = $val; $w->set( $rc => $val ); $w->selectionClear('all'); $w->configure( -state => 'disabled' ); withdraw_edit_widgets($w); } ); } sub withdraw_edit_widgets {

- 92 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

my ($w) = @_; my $toplevel = $w->{toplevel}; if ( $toplevel && $toplevel->state eq 'normal' ) { $toplevel->withdraw(); } } #-------------------------------------------------------------sub define_bitmaps { my ($w) = @_; my $optionmenu = ' /* XPM */ static char * xpm[] = { "11 5 3 1", " c None", "+ c #D0D0D0", "@ c #555555", "+++++++++++", "++++++++++@", "++ @@", "++@@@@@@@@@", "+@@@@@@@@@@"}; '; my $browseentry = ' /* XPM */ static char * xpm[] = { "11 7 3 1", " c None", "+ c #D0D0D0", "@ c #555555", "+++++++++++", "++++++++++@", "+++ @@@", " +++ @@@ ", " +++ @@@ ", " ++@@@ ", " @@@ ", }; '; my $cbutton0 = ' /* XPM */ static char * xpm[] = { "9 8 3 1", " c None", "@ c #B8B8B8", "+ c #555555", "+++++++++", "++++++++@", "++ @@", "++ @@", "++ @@", "++ @@", "++@@@@@@@", "+@@@@@@@@"}; }; '; my $cbutton1 = ' /* XPM */ static char * xpm[] = { "9 8 4 1", " c None", "@ c #B8B8B8", "+ c #555555",

- 93 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

". c #FF0000", "+++++++++", "++++++++@", "++.....@@", "++.....@@", "++.....@@", "++.....@@", "++@@@@@@@", "+@@@@@@@@"}; }; '; my %images; $images{optionmenu} $images{browseentry} $images{checkbutton0} $images{checkbutton1} %images; }

= = = =

$w->Pixmap( $w->Pixmap( $w->Pixmap( $w->Pixmap(

'optionmenu', 'browseentry', 'cbutton0', 'cbutton1',

-data -data -data -data

=> => => =>

$optionmenu ); $browseentry ); $cbutton0 ); $cbutton1 );

########## ### Demo of using embedded windows in TableMatrix ### ### ### ### ### This works well, but can be slow for very large tables with many windows. See edit_styles.pl for an alternative that is faster for larger tables

use Tk; use Tk::BrowseEntry; use Tk::TableMatrix; use Data::Dumper qw( DumperX); my $top = MainWindow->new; my $arrayVar = {}; foreach my $row ( 0 .. 20 ) { foreach my $col ( 0 .. 10 ) { $arrayVar->{"$row,$col"} = "r$row, c$col"; } } my $t = $top->Scrolled( 'TableMatrix', -rows => 21,

- 94 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

-cols -width -height -titlerows -titlecols -variable -selectmode -resizeborders -titlerows -titlecols -bg # # # );

=> => => => => => => => => => =>

11, 6, 6, 1, 1, $arrayVar, 'extended', 'both', 1, 1, 'white',

-state => 'disabled' -colseparator => "\t", -rowseparator => "\n"

$t->tagConfigure( 'active', -bg => 'gray90', -relief => 'sunken' ); $t->tagConfigure( 'title', -bg => 'gray85', -fg => 'black', -relief => 'sunken' ); ################ Put in some embedded windows ################ my $l = $top->Checkbutton( -text => 'CheckButton' ); $t->windowConfigure( "3,3", -sticky => 's', -window => $l ); my $c = $top->BrowseEntry( -label => "Month:" ); $c->insert( "end", "January" ); $c->insert( "end", "February" ); $c->insert( "end", "March" ); $c->insert( "end", "April" ); $c->insert( "end", "May" ); $c->insert( "end", "June" ); $c->insert( "end", "July" ); $c->insert( "end", "August" ); $c->insert( "end", "September" ); $c->insert( "end", "October" ); $c->insert( "end", "November" ); $c->insert( "end", "December" ); $t->windowConfigure( "2,2", -sticky => 'ne', -window => $c ); # Leave enough room for the windows $t->colWidth( 2, 20 ); $t->colWidth( 3, 20 ); $t->pack( -expand => 1, -fill => 'both' ); Tk::MainLoop;

## maxsize.tcl ## ## This demo uses a really big table.

The big startup time is in

- 95 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

## filling the table's Tcl array var. ## ## jeff.hobbs@acm.org ## Converted to perl/tk by John Cerney 7/24/00 use Tk; use Tk::TableMatrix; my $top = MainWindow->new; my $arrayVar = {}; print "Filling Array...\n"; my ( $rows, $cols ) = ( 40000, 10 ); foreach my $row ( 0 .. ( $rows - 1 ) ) { foreach my $col ( 0 .. ( $cols - 1 ) ) { $arrayVar->{"$row,$col"} = "$row,$col"; } } print "Creating Table...\n"; ## Test out the use of a callback to define tags on rows and columns sub colSub { my $col = shift; return "OddCol" if ( $col > 0 && $col % 2 ); } my $label = $top->Label( -text => "TableMatrix v2 Example" ); my $t = $top->Scrolled( 'TableMatrix', -rows => $rows, -cols => $cols, -width => 6, -height => 6, -titlerows => 1, -titlecols => 1, -variable => $arrayVar, -coltagcommand => \&colSub, -colstretchmode => 'last', -rowstretchmode => 'last', -selectmode => 'extended', -selecttitles => 0, -drawmode => 'slow', ); my $button = $top->Button( -text => "Exit", -command => sub { $top->destroy } ); # hideous Color definitions here: $t->tagConfigure( 'OddCol', -bg => 'brown', -fg => 'pink' ); $t->tagConfigure( 'title', -bg => 'red', -fg => 'blue', -relief => 'sunken' ); $t->tagConfigure( 'dis', -state => 'disabled' ); my $i = -1; my $first = $t->cget( -colorigin ); my $anchor; foreach $anchor (qw/ n s e w nw ne sw se c /) { $t->tagConfigure( $anchor, -anchor => $anchor ); $t->tagRow( $anchor, ++$i ); $t->set( "$i,$first", $anchor ); } $top->fontCreate( 'courier', -family => 'courier', -size => 10 ); $t->tagConfigure( 's', -font => 'courier', -justify => 'center' ); $t->colWidth( -2 => 8, -1 => 9, 0 => 12, 4 => 14 ); $label->pack( -expand => 1, -fill => 'both' );

- 96 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

$t->pack( -expand => 1, -fill => 'both' ); $button->pack( -expand => 1, -fill => 'both' ); Tk::MainLoop;

## ## ## ## ## ## ##

spreadsheet.tcl This demos shows how you can simulate a 3D table and has other basic features to begin a basic spreadsheet jeff.hobbs@acm.org Converted to perl/tk by John Cerney

use Tk; use Tk::TableMatrix; my ( $rows, $cols ) = ( 10, 10 ); my $page = 'AA'; my $oldPage = ''; # number of rows/cols

my $tableColors = { default => 'pink', AA => 'orange', BB => 'blue', CC => 'green' }; my $top = MainWindow->new; sub colorize { my ($num) = @_; return 'colored' if ( $num > 0 && $num % 2 ); return ''; } # Sub to fill the array variable sub fill { my ( $name, $array, $r, $c ) = @_; my ( $i, $j ); $r ||= $rows; $c ||= $cols; for ( $i = 0; $i < $r; $i++ ) { for ( $j = 0; $j < $c; $j++ ) { if ( $j && $i ) { $array->{"$i,$j"} = "$name $i,$j"; } elsif ($i) { $array->{"$i,$j"} = "$i"; }

- 97 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

elsif ($j) { $array->{"$i,$j"} = sprintf( "%c", ( $j + 64 ) ); } } } } my $arrayVar = { AA => {}, BB => {}, CC => {} }; fill( 'AA', $arrayVar->{AA}, $rows, $cols ); fill( 'BB', $arrayVar->{BB}, $rows / 2, $cols / 2 ); my $t = $top->Scrolled( 'TableMatrix', -rows => $rows, -cols => $cols, -width => 5, -height => 5, -titlerows => 1, -titlecols => 1, -coltagcommand => \&colorize, -selectmode => 'extended', -flashmode => 'on', -variable => $arrayVar->{$page}, ); my $label = $top->Label( -text => "TableMatrix vs Spreadsheet Example" ); # Label the changes with the value of currentTest my $currentText = ''; my $currentLabel = $top->Label( -textvariable => \$currentText ); # Entry that changes with the value of activeText my $activeText = ''; my $activeEntry = $top->Entry( -textvariable => \$activeText ); my $pageLabel = $top->Label( -text => 'PAGE:', -width => 6, -anchor => 'e' ); my $pageSelect = $top->Optionmenu( -options => [qw/ AA BB CC/], -variable => \$page, -command => [ \&changepage ] ); sub changepage { my ($newPage) = @_; if ( $newPage ne $oldPage ) { $t->selectionClear('all'); $t->activate(''); # unactivate anything $t->configure( -variable => $arrayVar->{$newPage} ); # $e config -textvar ${i}(active) $t->activate('origin'); if ( exists $tableColors->{$newPage} ) { $t->tagConfigure( 'colored', -bg => $tableColors->{$newPage} ); } else { $t->tagConfigure( 'colored', -bg => $tableColors->{'default'} ); } $t->see('active'); $oldPage = $newPage; # fill up the array variable # fill up the array variable

- 98 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

} } $t->configure( -browsecommand => sub { my ( $oldindex, $index ) = @_; $currentText = $index; $activeText = $t->get($index); } ); # hideous Color definitions here: $t->tagConfigure( 'colored', -bg => $t->tagConfigure( 'title', -fg => $t->tagConfigure( 'blue', -bg => $t->tagConfigure( 'green', -bg =>

$tableColors->{$page} ); 'red', -relief => 'groove' ); 'blue' ); 'green' );

$t->tagCell( 'green', '6,3', '5,7', '4,9' ); $t->tagCell( 'blue', '8,8' ); $t->tagRow( 'blue', 7 ); $t->tagCol( 'blue', 6, 8 ); $t->colWidth( 0 => 3, 2 => 7 ); $label->grid( '-', '-', '-', '-', '-sticky' => 'ew' ); $currentLabel->grid( $currentLabel, $activeEntry, $pageLabel, $pageSelect, '-', '-sticky' => 'ew' ); $t->grid( '-', '-', '-', '-', '-sticky' => 'nsew' ); $top->gridColumnconfigure( 1, -weight => 1 ); $top->gridRowconfigure( 2, -weight => 1 ); Tk::MainLoop;

# Script show tag merging behavior with an option set in the # option database. # # Should display with one row hightlighted red and a cell in the row left-justified use Tk; use Tk::TableMatrix; use strict; my $mw = MainWindow->new; #$mw->optionAdd('*background', 'blue', 'interactive'); $mw->optionAdd( '*tablematrix*background', 'skyblue' ); my $table = $mw->TableMatrix( -rows => 5,

- 99 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

-cols => 8, -cache => 1, #-bg => 'blue', ); $table->pack( -expand => 1, -fill => 'both' ); foreach my $row ( 0 .. 4 ) { #$table->tagRow('invalid', $row); foreach my $column ( 0 .. 7 ) { $table->set( "$row,$column", "hello" ); #$table->tagCell('left', "$row,$column"); } } # 'invalid' tag takes # so the cell 2,3 $table->tagConfigure( $table->tagConfigure( priority of 'left' tag, because it should be red and center anchored, "invalid", -background => 'red', "left", -background => 'green', is created first, but see below... -anchor => 'center' ); -anchor => 'w' ); # swap

# swap

$table->tagCell( 'left', '2,3' ); $table->tagRow( 'invalid', 2 ); # The tag priority is changed, so the cell 2,3 will be gree and 'w' achored. $table->tagRaise( 'left', 'invalid' ); # This would have the same effect as the above tagRaise #$table->tagLower('invalid', 'left'); MainLoop;

# Script show the new multi-number borderwidth option for tags # Borderwidth can be specified as a space separated list of # 4 numbers representing left right top bottom borders drawn in a cell # # In this example, the tag'ed row will have a large top/bottom border, and a normal # size left/right border use Tk; use Tk::TableMatrix; use strict; my $mw = MainWindow->new; #$mw->optionAdd('*background', 'blue', 'interactive'); $mw->optionAdd( '*tablematrix*background', 'skyblue' ); my $table = -rows => -cols => -cache => $mw->TableMatrix( 5, 8, 1,

#-bg => 'blue', );

- 100 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

$table->pack( -expand => 1, -fill => 'both' ); $table->tagConfigure( "invalid", -background => 'red', -relief => 'raised', -bd => '1 1 5 5' ); $table->tagConfigure( "left", -anchor => 'w' ); foreach my $row ( 0 .. 4 ) { #$table->tagRow('invalid', $row); foreach my $column ( 0 .. 7 ) { $table->set( "$row,$column", "hello" ); #$table->tagCell('left', "$row,$column"); } } $table->tagCell( 'left', '2,3' ); $table->tagRow( 'invalid', 2 ); MainLoop; # swap

# swap

lien :

TableMatrix

- 101 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Tous les widgets > Les widgets composites

- 102 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Les graphes, les images Comment crer des graphes, courbes, histogrammes, lignes, aires, boxplots... ?
Auteurs : djibril , Pour crer des graphes avec des courbes, des barres (histogrammes), des aires, des nuages de points, des boxplots, il existe quelques modules sur le CPAN permettant de le faire en Perl/TK : Tk::LineGraph : permet de crer des graphes sous forme de lignes. Il est possible de zoomer. L'inconvnient de ce module est qu'il cre un widget part avec un menu. Il est donc difficile de l'utiliser pour gnrer un graphe et de l'insrer dans son canevas. Tk::PlotDataset : est bas sur le module Tk::LineGraph, le graphe ne se cre plus dans un widget spar. Il est donc possible de crer sa courbe dans le canevas voulu. Il ne peut gnrer que des courbes (lignes). Tk::Graph : permet de crer un graphique en temps rel en appelant une procdure par intervalle. Il est possible de crer des courbes, diagrammes en barres et hbar, et des camemberts. Son inconvnient peut tre le design et surtout le fait qu'au niveau de l'axe x, on ne peut pas utiliser des donnes qualitatives. Il utilise les axes x et y au sens mathmatique. Tk::Chart : permet de crer des courbes (courbes de Bzier ou non), des diagrammes en barres (histogrammes), des lignes, des aires, des camemberts et mme des boxplots. Il cre les images comme GDGraph, la seule diffrence qu'elles sont dans un widget Canvas et qu'elles sont interactives. Avec ce module, il est possible de tracer des variables quantitatives en fonction de variables qualitatives. Il nous donne la possibilit de zoomer l'image verticalement, horizontalement ou les deux. On peut jouer avec le design et n'afficher que quelques lments du graphe. Voici un exemple de ce que l'on peut faire avec ce module :

Tk::Chart::Mixed Autre solution : Vous pouvez crer une image via une multitude de modules du CPAN, comme par exemple GDGraph et ensuite l'afficher dans votre widget. Cela fonctionne trs bien pour de petites images. Le seul
- 103 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

inconvnient est que l'image n'est pas interactive et qu'elle peut tre trs longue charger dans le widget si cette dernire est de grande taille.

Comment afficher un GIF anim dans une fentre ?


Auteurs : djibril , Il est simple d'afficher un GIF anim grce au module Tk::Animation. Je vous conseille d'installer galement le

module Image::Info comme il est stipul dans la documentation du module. Voici un exemple de code : Tk::Animation
#!/usr/bin/perl use strict; use warnings; use Tk; use Tk::Animation; my $mw = MainWindow->new( -title => "Tk::Animmation", -background => 'white' ); my $animation = $mw->Animation( -format => 'gif', -file => 'VotreGif.gif' ); my $nbr_frame = $#{ $animation->{'_frames_'} }; $animation->add_frame($animation); $animation->start_animation(); $animation->set_image( 0 .. $nbr_frame ); # Affichons, l'image dans un label $mw->Label( -image => $animation, )->pack; MainLoop;

lien :

Tk::Animation

- 104 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Liaisons d'vnements bind (souris, clavier...) Comment connatre la position de ma souris ?
Auteurs : djibril ,
$widget->update; my $x = $widget->pointerx(); my $y = $widget->pointery();

ou
$widget->update; my ($x, $y) = $widget->pointerxy();

Il est important de faire un update du widget, sinon vous obtiendrez les coordonnes (0,0).

Comment changer le curseur de la souris ?


Auteurs : djibril , Vous devez utiliser l'option -cursor dans votre widget et spcifier le nom de curseur que vous souhaitez attribuer. exemple d'criture
-cursor => "boat",

Voici un script qui vous liste tous les types de curseurs existants.
#!/usr/bin/perl use warnings; use strict; use Tk; my $fenetre = new MainWindow( -title => 'curseur', -background => 'white', ); my $List = $fenetre->Scrolled('Listbox', -scrollbars => "oe", )->pack(); # Affichage d'un bouton pour fermer la fentre my $bouton = $fenetre->Button ( -text => 'Dtruire la fentre', -command => \&detruire_fenetre, )->pack(); # Listons tous les types de curseurs possibles my $fichier_curseurs; # Sous windows if ( $^O eq 'MSWin32' ) { $fichier_curseurs = 'C:/Perl/site/lib/Tk/X11/cursorfont.h'; } elsif ( $^O eq "linux" ) { $fichier_curseurs = '/usr/include/X11/cursorfont.h'; } open ( my $fh_curseur, $fichier_curseurs ) or die("Le fichier $fichier_curseurs n'existe pas"); while ( <$fh_curseur> ) {

- 105 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

if ( m{#define\sXC_(\w+)\s} ) { next if $1 eq 'num_glyphs'; $List->insert("end", $1); $List->bind("<Button-1>", sub { $fenetre->configure( -cursor=>$List->get( $List->curselection ) ); } ) } } close($fh_curseur); MainLoop; sub detruire_fenetre { exit; return; }

- 106 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

X_cursor bogosity box_spiral cross dotbox exchange hand2 left_side man plus rightbutton sb_left_arrow sizing tcross top_tee watch

Voici une liste des curseurs sur mon PC Windows arrow based_arrow_down ased_arrow_up boat b bottom_left_corner ottom_right_corner b bottom_side bottom_tee center_ptr circle clock coffee_mug cross_reverse crosshair diamond_cross dot double_arrow draft_large draft_small draped_box fleur gobbler gumby hand1 heart icon iron_cross left_ptr left_tee leftbutton ll_angle lr_angle middlebutton mouse pencil pirate question_arrow right_ptr right_side right_tee rtl_logo sailboat sb_down_arrow sb_h_double_arrow sb_right_arrow sb_up_arrow sb_v_double_arrow shuttle spider spraycan star target top_left_arrow top_left_corner top_right_corner top_side trek ul_angle umbrella ur_angle

- 107 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Tk et les threads Peut-on utiliser les threads en Perl/Tk ?


Auteurs : djibril , La version actuelle de Perl Tk (Tk-804.029) est no thread safe (n'est pas sans danger avec les threads). Il est nanmoins possible d'utiliser des threads en Perl TK, mais, c'est assez compliqu. La cration des threads doit se faire avant tout code TK dans le script. Pour en savoir plus ce sujet, un article a t crit sur ce sujet. Vous pouvez le consulter, il s'intitule " Perl/Tk non fige... les threads". Bonne lecture ! Application

lien : lien :

threads Tk

- 108 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Habillage et configuration des fentres Tk Comment changer l'habillage de mon canevas ?
Auteurs : djibril , Pour changer la couleur de son canevas, il est possible de modifier les couleurs de ce dernier via les options prdfinies du module Tk::Canvas. Sachez qu'il est galement possible d'appliquer une couleur dgrade grce au module Tk::Canvas::GradientColor. Le sujet est trait la question : Comment crer un canevas avec une couleur de fond dgrade ?

lien : lien :

Tk::Canvas Tk::Canvas::GradientColor

Comment changer l'habillage de mon bouton ?


Auteurs : djibril , Pour changer la couleur de son bouton, il est possible de modifier les couleurs de ce dernier via les options prdfinies du module Tk::Button. Sachez qu'il est galement possible d'appliquer une couleur dgrade grce au module Tk::ColoredButton. Le sujet est trait la question : Comment crer un bouton avec une couleur de fond dgrade ?

lien : lien :

Tk::Button Tk::ColoredButton

- 109 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Habillage et configuration des fentres Tk > Comment habiller automatiquement toute mon application Comment configurer des couleurs avec setPalette, bisque ?
Auteurs : djibril , La rponse ci-dessus est issue du livre Configuration des couleurs Introduction Perl/Tk qui n'est malheureusement plus disponible en franais.

La mthode SetPalette permet votre application d'utiliser automatiquement des couleurs en fonction d'une couleur donne.
$widget->setPalette('couleur');

La couleur de fond de $widget sera de la couleur spcifie et les couleurs de tous les autres widgets seront calcules partir de celle-ci. Ainsi, si le contour d'un bouton est plus clair que le fond, il apparatra dans une teinte plus claire que la couleur choisie. Cette mthode affecte l'application entire, mme si on l'a appele sur un widget plutt que sur la fentre. Les couleurs de certaines options sont configurables ; il suffit de fournir le nom de l'option, puis la couleur que l'on souhaite lui associer. Le fragment de code suivant, par exemple, met en rouge l'avant-plan de l'application et en bleu le fond :
$b->setPalette("background" => "blue", "foreground" => "red");

Configuration de couleur prdfinie

La mthode bisque utilise la configuration de couleur "bisque" pour toute l'application. L'appel $widget->bisque() est quivalent $widget->setPalette("bisque")

lien :

bisque

Comment appliquer un thme (un habillage) mes widgets ?


Auteurs : djibril , Il n'existe pas de thme en Perl Tk permettant de changer l'aspect de l'interface graphique. Dans une application graphique, le plus important n'est pas le rendu et sa beaut, mais d'abord le rsultat que l'on attend, donc son but. Nanmoins, il est toujours agrable de changer l'habillage de ses fentres, de ses widgets ! L'aspect d'une interface graphique dpend d'abord du systme d'exploitation sous lequel tourne l'application. Le rendu sera diffrent que l'on soit sous Windows 2000, XP, Vista, Seven, Linux, Mac, BSD, etc. Mais il est tout de mme possible de changer les couleurs de nos widgets, les paisseurs des bordures... Pour changer l'aspect de nos widgets, il faut modifier soi-mme chaque cration d'un widget les options -background, -foreground, -disabledbackground, -highlightbackground... De plus, il faut vrifier dans la documentation de chaque widget la disponibilit des options. Ce travail peut tre fastidieux lorsque notre application contient plusieurs widgets. Pour effectuer un changement global notre application, nous pouvons utiliser la mthode Comment configurer des couleurs avec setPalette, bisque ?. Cette mthode est efficace, mais le rendu obtenu n'est pas toujours celui souhait. De plus, il est impossible de le personnaliser. Une autre technique consiste utiliser le module standard de Tk Tk::CmdLine. Nous n'allons pas expliquer son fonctionnement qui n'est pas toujours vident, mais sachez qu'il est efficace et permet le chargement de fichier, mais il ne propose aucun habillage par dfaut.

- 110 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Il existe actuellement Tk::Dressing qui propose quelques thmes (ou plutt habillages) par dfaut. Vous devez l'installer pour l'utiliser. Il permet galement une importation de votre propre thme en chargeant un fichier .ini dans lequel vous aurez mis les options voulues pour vos widgets. Ce fichier est de ce type.
[BrowseEntry] -background: #A8A8A8 -foreground: #FFFFFF -disabledbackground: #A8A8A8 -disabledforeground: #4E4E4E [Button] -activebackground: #686868 -background: #686868 -foreground: #FFFFFF -disabledforeground: #414141 -activeforeground: #FFFFFF [Canvas] -background: #A8A8A8

Il est possible de proposer un thme au propritaire du module afin qu'il puisse l'y intgrer. Ce module est simple d'utilisation et applique le thme choisi un widget voulu (et ses enfants). Ainsi, vous pouvez avoir plusieurs widgets avec un habillage diffrent. Voici un exemple d'utilisation du module issu de la documentation officielle.
#!/usr/bin/perl use warnings; use strict; use Tk; use Tk::Dressing; use Tk::BrowseEntry; my $TkDressing = Tk::Dressing->new(); my $mw = MainWindow->new( -title => "Dressing widget", ); $mw->minsize( 300, 100 ); $mw->Button( -text => 'Close', )->pack(qw/ -side bottom -padx 10 -pady 10 /); my $BrowseEntryTheme = $mw->BrowseEntry( -label => "Select a theme : ", -state => 'readonly', -choices => [ 'clear dressing', sort $TkDressing->get_all_theme ], )->pack; my $Message $mw->Label( $mw->Label( $mw->Entry( = "Hello -text => -text => -text => everybody\n\nWelcome to Perl/Tk and Tk::Dressing\n\n"; $Message, -anchor => 'center' )->pack(qw/ -side top -padx 10 -pady 10 /); 'Example : ', -anchor => 'center' )->pack(qw/ -side left -padx 10 -pady 10 /); 'test', )->pack(qw/ -side left -padx 10 -pady 10 /);

$BrowseEntryTheme->configure( -browse2cmd => sub { my $theme = $BrowseEntryTheme->Subwidget('entry')->get; if ( $theme eq 'clear dressing' ) { $TkDressing->clear($mw); return; } $TkDressing->design_widget( -widget => $mw, -theme => $theme, ); }, ); MainLoop;

- 111 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Avec ce code, nous avons test quatre thmes fournis par le module. L'image ci-dessous montre l'habillage par dfaut de la fentre Tk suivi des quatre thmes.

On peut constater que l'on a un rendu compltement diffrent sans avoir configurer la main les diffrents widgets. N'hsitez pas utiliser ce module !

lien : lien : lien :

Comment configurer des couleurs avec setPalette, bisque ? Tk::CmdLine Tk::Dressing

- 112 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Sommaire > Astuces et divers Comment afficher les messages d'erreur Perl dans une fentre Tk ?
Auteurs : djibril , Si vous souhaitez que les messages d'erreurs Tk apparaissent dans une fentre Tk, plutt que sur la console, utilisez la procdure Tk::Error. Toutes les erreurs Tk obtenues seront rcupres par la procdure. Il suffit de les faire afficher dans un widget fils. Afficher des erreurs Tk
#!/usr/bin/perl use warnings; use strict; use Tk; # Appel du module Tk my $fenetre = new MainWindow( -title => "Premire fentre Tk ", -background => "white", ); # Affichage d'un bouton pour fermer la fentre my $bouton = $fenetre->Button ( -text => "Dtruire la fentre", -command => \&DestructionFenetre, )->pack(); MainLoop; # Obligatoire

sub DestructionFenetre { $fenetre->TOTO; # => On introduit dlibrment une erreur car la mthode TOTO n'existe pas exit; return; } #================================================ # But : Afficher les messages d'erreurs dans une fentre # Arguments : rien # Retour : Rien #================================================ sub Tk::Error { my ( $widget, $Error, @Locations ) = @_; # Error widget my $MwError = $widget->Toplevel( -background => "white" ); $MwError->title( "Fentre d'erreurs" ); $MwError->minsize( 300, 300 ); $MwError->grab(); my $MessageError = $MwError->Scrolled( "Text", -scrollbars => "oe" ); $MessageError->delete( "1.0", "end" ); $MessageError->insert( "end", "Erreur : $Error\n\n" ); #$MessageError->insert( "end", "Location : @Locations\n\n" ); #$MessageError->insert( "end", "Widget : $widget\n" ); $MessageError->pack( -fill => "both", -expand => 1, ); return; }

Pour tester ce script, lancez-le et cliquez sur le bouton.

lien :

Tk::Error

- 113 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

lien :

Article : Gestion des sorties standards et d'erreurs en Perl/Tk

Comment rediriger la sortie standard STDOUT dans une fentre TK ?


Auteurs : djibril , Il est possible d'afficher la sortie STDOUT dans un widget Tk (Text ou ROText). Voici un script d'exemple :
#!/usr/bin/perl use warnings; use strict; use Tk; my $mw = MainWindow->new; my $Scrolled = $mw->Text( -height => 10, -wrap => "none", -relief => "solid", -background => "white", )->pack(-fill => "both", -expand => 1); tie *STDOUT, ref $Scrolled, $Scrolled; print "Hello Text World!\n\n"; print "ceci est un test\n\n"; MainLoop;

lien :

Article : Gestion des sorties standards et d'erreurs en Perl/Tk

Comment slectionner un rpertoire ?


Auteurs : djibril , Utilisez la mthode "chooseDirectory" pour slectionner un rpertoire.
my $Directory -title -initialdir -mustexist ); = $widget->chooseDirectory( => "Mon titre", # Titre fentre => "C:/", # Rpertoire par dfaut => 1, # Le rpertoire slectionn doit exister

print $Directory;

Vous pouvez mettre ce code dans une procdure pour le lier un bouton. N.B. Sous Windows, vous pouvez avoir des soucis avec les chemins contenant des accents, dans ce cas, utiliser le module Encode.
# Windows my $OS = lc($^O); if ( $OS eq 'mswin32' ) { $Directory = encode( 'iso-8859-1', $Directory );

- 114 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

lien :

chooseDirectory

Comment slectionner un ou plusieurs fichiers ?


Auteurs : djibril , Utilisez la mthode "getOpenFile" pour slectionner vos fichiers. Slectionner plusieurs fichiers
my @TabFiles = $widget->getOpenFile( -initialdir => "C:/", -multiple => 1, ); print "@TabFiles";

Modifiez les options pour slectionner un fichier. Slectionner un fichier :


my $File = $widget->getOpenFile( -initialdir => "C:/", ); print $File;

Il est possible de spcifier les types de fichiers que vous souhaitez afficher par dfaut. Lisez la documentation officielle pour en savoir davantage. N.B. Sous Windows, vous pouvez avoir des soucis avec les chemins contenant des accents, dans ce cas, utilisez le module Encode.
# Windows my $OS = lc($^O); if ( $OS eq 'mswin32' ) { $File = encode( 'iso-8859-1', $File ); }

lien :

getOpenFile

Comment rcuprer des fichiers ou rpertoires via un drag & drop ?


Auteurs : djibril , Le but est de faire un glisser-dposer de fichiers ou rpertoires dans un widget Text sous Windows afin de trouver le chemin et le nom du fichier ou rpertoire.
#!/usr/bin/perl use warnings; use strict; use Tk; use Tk::Dropsite 'Win32'; use File::Basename; use utf8; my $mw = MainWindow->new( -background => '#E0F0FF', );

- 115 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

$mw->Label( -text => 'Faire un glisser-dposer de fichiers ou rpertoires dans le widget ci-dessous', -background => '#E0F0FF', )->pack(qw/ -side top -pady 2/); my $widgetTextDragDrop = $mw->Scrolled( 'Text', -background => 'white', -scrollbars => 'osoe', -wrap => 'none', -height => 7, )->pack(qw/ -side top -pady 2/); $mw->Label( -text => 'Rsultat', -background => '#E0F0FF', )->pack(qw/ -pady 2/); my $widgetTextResultat = $mw->Scrolled( 'Text', -background => 'white', -scrollbars => 'osoe', -wrap => 'none', )->pack(qw/ -pady 2 -fill both -expand 1/); # Conception du glisser-dposer $widgetTextDragDrop->DropSite( -dropcommand => [ \&ActionDrop, $widgetTextDragDrop, $widgetTextResultat ], -droptypes => 'Win32', ); MainLoop; sub ActionDrop { my ( $widgetTextDragDrop, $widgetTextResultat ) = @_; my $sel = $widgetTextDragDrop->SelectionGet( -selection => 'CLIPBOARD' ); foreach my $fichier_rep ( split( /\n/, $sel ) ) { $widgetTextDragDrop->insert( 'end', "$fichier_rep\n" ); $widgetTextResultat->insert( 'end', "$fichier_rep\n" ); if ( -d $fichier_rep ) { $widgetTextResultat->insert( 'end', "\tRpertoire : $fichier_rep\n" ); } elsif ( -f $fichier_rep ) { $widgetTextResultat->insert( 'end', "\tFichier : (" . dirname($fichier_rep) . ', ' . basename($fichier_rep) . ")\n" ); } } return; }

Voici le rsultat :

- 116 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

Drag and drop fichiers/rpertoires Pour appliquer le glisser-dposer au widget Text, on utilise la mthode DropSite du module Tk::Dropsite sur le widget Text. Puis pour effectuer les slections, on utilise la mthode SelectionGet du module Tk::Selection.

lien : lien :

Tk::Dropsite Tk::Selection

Comment crer un calendrier ?


Auteurs : djibril , Pour crer un calendrier, dans un but didactique, on peut essayer de le faire soi-mme. Mais dans un but pratique, il existe dj un module sur le CPAN qui le fait pour nous. Il s'agit du module Tk::MiniCalendar. Il fonctionne trs bien et peut tre personnalis. Exemple d'utilisation :
#!/usr/bin/perl use warnings; use strict; use Tk; use Tk::MiniCalendar; my $fenetre = new MainWindow( -title => 'Calendrier Tk', ); $fenetre->minsize( 300, 300 ); my my my my @tab_date $Jour $Mois $Annee = = = = localtime(time); $tab_date[3]; $tab_date[4] + 1; $tab_date[5] + 1900;

my $CalendrierWidget = $fenetre->MiniCalendar( -day => $Jour, -month => $Mois, -year => $Annee, -day_names => [ 'Lu', 'M', 'Me', 'Je', 'V', 'Sam', 'Dim' ], -month_names => [ 'Janvier', 'Fvrier', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Aot', 'Septembre', 'Octobre', 'Novembre', 'Dcembre' ], )->pack; my $date = 'Aucune date slectionne'; $fenetre->Label( -textvariable => \$date, )->pack; - 117 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

$fenetre->Button( -text => 'Date selectionne ?', -command => sub { my ( $Annee, $Mois, $Jour ) = $CalendrierWidget->date; $date = "Date aprs clic : $Jour/$Mois/$Annee\n"; }, )->pack; MainLoop;

Widget calendrier Perl/Tk lien : Tk::MiniCalendar

Comment afficher l'heure dans un widget ?


Auteurs : yep2cv , Pour afficher l'heure dans un widget, voici deux procdures.
# # # # # # ================================================ But: excuter rgulirement une action, comme donner une heure Argument: le widget dans lequel placer (mainwindow ou autre) Attention, j'appelle le PACK, mais a doit correspondre avec le widget parent Exemple d'appel: $mw=MainWindow... UneCaseHorlogePack($mw) ================================================

sub UneCaseHorlogePack { my $parent = shift ; unless ($parent->IsWidget) { die "Erreur: mauvais appel, ce n'est pas un widget\n"; } my $menubar = $parent->Frame(-relief => 'raised', -borderwidth => 2)-> pack(); # avec quelle frquence je mets jour my $FREQUENCY = 1000 ; # millisecondes: 60000 = 1 min # zone d'affichage de l heure # on peut avoir Label ou Button my $horloge=$menubar->Label( -font => "dtinfo" , -text => "mon horloge" , -height=>'1' ,

- 118 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

-background => "black", -foreground => "white", -width=>30, -justify =>'center', ) -> pack(); # ce frame appelle rgulirement une fonction $menubar->repeat( $FREQUENCY, [\&UpdateTimeNow ,$horloge] ); } # la fonction qui s'excute rgulirement sub UpdateTimeNow { my $horloge = shift ; # attraper l'heure machine my $now= localtime(time) ; # puis l'afficher dans la zone prvue $horloge->configure(-text => $now ); # remarque: il est possible de l'afficher dans le bandeau fentre de l'application # $mw->title($now) # remarque: en gnral, je fais plein de trucs ici, rgulirement, pour des tableaux de bord }

Exemple d'utilisation
#!/usr/bin/perl use Tk; use strict; use warnings; my $mw = MainWindow->new( -background => "white" ); UneCaseHorlogePack($mw); ...

Comment obtenir une palette de couleur ?


Auteurs : djibril , La mthode choosecolor permet d'obtenir une fentre avec toutes les couleurs. Vous pouvez ainsi en choisir une.
#!/usr/bin/perl use strict; use warnings; use Tk; my $mw = MainWindow->new( -title => "Couleurs", -background => 'white' ); my $Anim = $mw->Button( -text => 'Select color with chooseColor', -command => sub { my $couleur = $mw->chooseColor( -title => 'Choisir couleur' ); $mw->configure( -background => $couleur ); }, )->pack(qw/ -pady 10 -padx 10/); MainLoop;

- 119 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

FAQ Perl/Tk

- 120 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2011 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme 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 intrts. Cette page est dpose la SACD.
http://perl.developpez.com/

Vous aimerez peut-être aussi