Académique Documents
Professionnel Documents
Culture Documents
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 !
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
-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.
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 :
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.
-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.
Pour plus d'informations sur l'installation des modules Perl, reportez-vous notre
cours.
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
Voil le rsultat :
-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
-ipady
-ipadx => x
-padx
-padx => x
-pady
-pady => x
-expand
0 ou 1
-expand => 1
-fill
-anchor
- 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
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
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
- 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'
'^'
-sticky
-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
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
= = = = = =
); ); ); ); ); );
- 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
);
'ns' ); 'ns' );
'ns' ); 'nsew' );
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
= = = = = =
); ); ); ); ); );
- 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
} 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,
0, 1, 2, 0, 1,
0, 1, 2, 0, 1,
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 => => => => => =>
); ); ); ); ); );
# 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
- 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
-x et -y
-relx et -rely
x (valeur ratio)
-width et -height
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
-relx => 50
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 !
lien :
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
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).
- 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
#================================================ # 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 :
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
Restaurer ma fentre
# si la fentre existe, je la restaure if ( Exists( $fenetre ) ) { $fenetre->deiconify(); $fenetre->raise(); }
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
Perl/Tk et le focus.
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
- 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');
lien :
Tk::Canvas
- 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
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
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();
- 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;
- 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
lien :
Tk::ROText
- 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'
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
+ 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 :
- 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
lien :
Tk::Text
- 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
'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;
- 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
- 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
- 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
lien :
- 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;
- 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();
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
- 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;
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',);
- 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
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
# 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;
- 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
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
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; }
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' ], );
- 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
- 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
Voil !!
- 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
# 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
# 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
- 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
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;
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
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
... 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
- 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.
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 ?
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'.
lien :
messageBox
- 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
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.
lien :
Tk::MsgBox
- 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
lien :
Tk::DialogBox
- 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;
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
# 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 !!
- 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
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
- 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
$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
) ) ) ) )
$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 ); }
- 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
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
- 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
lien :
Tk::MListbox
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
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 );
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
'OFF', -bg => 'gray60', -relief 'ON', -bg => 'gray80', -relief 'sel', -bg => 'gray70', -relief 'readonly', -relief => 'groove'
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; }
= = = =
########## ### 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 # # # );
=> => => => => => => => => => =>
$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;
- 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 =>
$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,
- 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
- 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.
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).
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
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
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");
La mthode bisque utilise la configuration de couleur "bisque" pour toute l'application. L'appel $widget->bisque() est quivalent $widget->setPalette("bisque")
lien :
bisque
- 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 !
- 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; }
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 :
lien :
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
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
- 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
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;
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); ...
- 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/