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 !


SommaireTous les widgetsLes champs de texte (Text, ROText...) (6)
précédent sommaire suivant
 

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;
Pour récupérer des lignes, il faut utiliser la méthode get.

Mis à jour le 31 août 2009 djibril

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( );

Mis à jour le 31 août 2009 djibril

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
L'idéal pour mieux comprendre ces notions est d'essayer de comprendre les exemples suivants :

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

Mis à jour le 30 septembre 2009 djibril

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') );

Mis à jour le 3 septembre 2009 djibril

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

Mis à jour le 30 septembre 2009 djibril

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;

Mis à jour le 24 avril 2010 djibril

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 ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les 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 © 2019 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.