FAQ Perl/TkConsultez toutes les FAQ
Nombre d'auteurs : 3, nombre de questions : 86, dernière mise à jour : 24 mai 2013 Ajouter une question
Bienvenue sur la FAQ Perl/Tk. Cette FAQ a pour vocation de vous enseigner ou de vous faire revoir les notions de Perl/Tk. N'hésitez pas à utiliser le moteur de recherche.
Vous souhaitez participer à l'amélioration de cette FAQ, n'hésitez pas !! Commentez
Bonne lecture !
- Comment créer un champ de texte ?
- Comment créer un champ de texte en lecture seule ?
- Qu'est-ce qu'un indice des widgets Text et ROText ?
- Comment récupérer les données d'un widget Text, ROText ?
- Comment voir une ligne d'un widget Text ou ROText ?
- Comment changer la couleur du texte dans un widget Text ?
Pour créer un champ texte, il faut utiliser le widget Text.
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #!/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"; # affiche la première ligne print $widget_texte->get('2.0', '2.end'),"\n"; # affiche la deuxième ligne # affiche le tout print 'Tout : ',$widget_texte->get('1.0', 'end'); # affiche tout my $bouton_selection = $fenetre_principale->Button( -text => 'affichez selection', -command => sub { print $widget_texte->getSelected,"\n"; }, )->pack(); MainLoop; |
Il faut utiliser le widget ROText de la même façon que le widget Text.
Code perl : | Sélectionner tout |
my $widget_texte_readonly = $fenetre_principale->ROText( )->pack( );
Un indice d'un widget text désigne une ligne précise ou l'un de ses caractères. Il est construit en utilisant un indice de base suivi éventuellement d'un modificateur.
'l.c' | l pour numéro de ligne et c pour numéro de colonne (caractères). l commence toujours à 1 et c à 0 |
'end' | fin du widget, après le retour chariot \n |
@x.y | Le caractère le plus près des coordonnées x et y |
marqueur.first | Premier caractère de type marqueur (tag) du widget text. exemple (gras.titre) si vous avez un marqueur 'gras' |
marqueur.last | Caractère placé immédiatement après le texte marqué marqueur (exemple : 'gras') |
'mark' | Indique le caractère juste après la marque nommée 'mark' (exemple de marques : insert, anchor, current) |
$widget | Il est possible de désigner l'emplacement par rapport à un widget que vous auriez placé dans le widget text |
$image | Idem que $widget, mais par rapport à l'emplacement d'une image |
[ + | - ] nombre [ chars | lines ] | + et - permettent d'additionner ou soustraire des lignes ou caractères à un indice de base |
'linestart' | Modifie l'indice afin de désigner le premier caractère de cette ligne |
'lineend' | Désigne le dernier caractère de la ligne |
'wordstart' | Ajuste l'indice pour qu'il désigne le premier caractère du mot pointé par l'indice de base |
'wordend' | Ajuste l'indice pour qu'il désigne le caractère placé après la fin du mot pointé par l'indice de base |
end - 1 lines | Texte placé sur la ligne avant 'end' |
'end linestart' | Ligne devant la dernière ligne |
'1.0' | Premier caractère de la première ligne |
'1.end' | Dernier caractère de la première ligne |
'3.0 - 1 chars' | Dernier caractère de la deuxième ligne (3e ligne ôtée d'un caractère) |
'3.0 - lineend' | Fin de la troisième ligne |
Pour récupérer les données dans un widget Text ou ROText, utilisez la méthode get. Cette méthode retourne le texte compris entre un indice de début et de fin spécifié. L'exemple ci-dessous récupère tout le texte du widget.
Code perl : | Sélectionner tout |
my $data = $widget_text->get('1.0','end');
Code perl : | Sélectionner tout |
my @lignes = split( /\n/, $widget_text->get('1.0','end') );
Il est souvent important d'afficher la dernière ligne d'un widget Text ou ROText. Au fur et à mesure de l'insertion de données dans le widget, il faut descendre l'ascenseur (barre de défilement) manuellement pour voir la dernière ligne. Pour le faire automatiquement, il faut utiliser la méthode see en lui donnant en argument l'indice de la ligne.
Code perl : | Sélectionner tout |
1 2 3 | $widget_text->see('1.0'); # Voir la première ligne du widget $widget_text->see('25.0'); # Voir la 25e ligne du widget $widget_text->see('end'); # Voir la dernière ligne du widget |
Lorsque vous souhaitez appliquer une couleur à tout le texte de votre widget, il suffit d'utiliser l'option -foreground à sa création. La couleur s'appliquera à toutes les lignes de texte du widget.
Cependant, si vous avez envie d'appliquer des couleurs à des portions de texte, à certaines lignes, il faut utiliser des marqueurs.
Voici un exemple de code où nous créons deux marqueurs. Le premier pour mettre un texte en rouge et la ligne en gris, puis un deuxième permettant de mettre le texte en bleu et en gras.
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #!/usr/bin/perl use strict; use warnings; use Tk; my $fenetre_principale = MainWindow->new( -title => 'Couleur texte' ); my $widget_texte = $fenetre_principale->Text()->pack(); # Création des tags $widget_texte->tagConfigure( 'rouge', -background => '#E3E3E3', -foreground => 'red', ); $widget_texte->tagConfigure( 'bleue_gras', -foreground => 'blue', -font => '{Courrier New} 10 {bold}', ); $widget_texte->insert( 'end', "Ligne en rouge\n", 'rouge' ); $widget_texte->insert( 'end', "Ligne en bleu gras\n", 'bleue_gras' ); $widget_texte->insert( 'end', 'Bonjour ' ); $widget_texte->insert( 'end', 'mes amis les perléens aimant le ', 'bleue_gras' ); $widget_texte->insert( 'end', 'Perl/TK', 'rouge' ); $widget_texte->insert( 'end', "\nMerci de votre lecture\n" ); $widget_texte->insert( 'end', "Au revoir\n" ); $widget_texte->insert( 'end', "Bye\n", 'bleue_gras' ); MainLoop; |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.