IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques Perl Discussion :

[Perl/tk]affichage simultané Entry/Label


Sujet :

Interfaces Graphiques Perl

  1. #1
    Membre habitué Avatar de VinnieMc
    Inscrit en
    Décembre 2005
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 208
    Points : 161
    Points
    161
    Par défaut [Perl/tk]affichage simultané Entry/Label
    Bonjour, j'ai trouvé ce tutorial sur Perl/Tk, qui montre comment afficher dans un Label ce qui est tapé dans une zone de saisie et ce, de façon simulatné.

    http://lionel.romain.free.fr/entry.html#ancre2

    Ce que j'aimerais faire, c'est récupérer ce qui est entré dans la zone de saisie, puis vérifier s'il y a un mot (d'une liste stockée dans un fichier externe)qui commence par ce qui est tapé dans la zone de saisie et de l'afficher dans le Label de manière simultanée, et sans passer par un bouton qui permetterait de valider la saisie de l'utilisateur.

    exemple:

    L'utilisateur entre la lettre "m" et il obtient (en même temps qu'il entre les lettres) dans le label une liste des mots qui commencent par "m", puis il entre un "a", ce qui donne "ma" et il obtient les mots qui commencent par "ma" et ainsi de suite.

    J'espère que j'ai été assez clair, si vous avez besoin de précisions, je les apporterai volontier.

    Merci

  2. #2
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    C'est tout à fait possible, mais je te recommande de ne pas déclencher la recherche tant qu'il n'y a pas 3 ou 4 lettres de tapées dans la zone de saisie. Sinon, la recherche risque de mettre ton application à genoux et de faire exploser la taille de ton label.

    Après, à supposer que tes mots soient dans une liste @mots, et le début de ton texte saisi dans $debut, tu peux utiliser grep pour filtrer avec une expression rationnelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @selection = grep { m/^$debut/ } @mots;
    Tu n'as plus, ensuite, qu'à faire un join de @selection avec un séparateur (ou pas de join s'il n'y a qu'un élément ou moins), et à afficher ça dans ton label.

    Bon courage.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  3. #3
    Membre habitué Avatar de VinnieMc
    Inscrit en
    Décembre 2005
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 208
    Points : 161
    Points
    161
    Par défaut
    Salut, comme j'ai dit dans mon premier poste, je n'ai pas envie de passer par un bouton d'évaluation, je voudrais que la valeur du widget Entry soit constamment testée.
    J'ai réussi à faire un truc qui s'en rapproche, mais il y a encore quelques erreurs que je n'arrive pas à régler. La première, c'est que je dois taper au moins deux lettres avant que ne soit affiché le mot qui commence par ces lettres,alors qu'une lettre suffirait. Et j'aimerais aussi que soit affichés tous les mots qui commencent par les lettres, par exmple "ma" afficherait "marcher" et "maison".

    Voici mon script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    #!C:\Perl\bin\perl.exe -w
     
    use Tk ;
     
    my $texte = "";
     
    my $mot = "";
     
    my @tableau=("manger","parler","il","nager","marcher","clavier","brahim","maison");
     
     
    sub Test{
     
    if ($texte eq "" ) {$mot=" ";} #cette ligne ne sert à rien, si ce n'est que lorsque je ne la met pas, le prog affiche le dernier mot, "maison"
    						#dans le label lorsqu'il ne trouve rien.
     
    else{
     
    	for ($i=0;$i<=$#tableau;$i++){
    		if ($tableau[$i] =~m/^$texte/) {$mot=$tableau[$i];}
    		}
    	}
    return 1;
    }
     
     
     
     
    sub QuitterApplication
    {
      exit ( 0 ) ;
    }
     
     
    # Programme principal
     
    $fenetre = new MainWindow ( ) ;
    $fenetre -> title ( "Application 10" ) ;
     
    $message = $fenetre -> Label ( -textvariable => \$mot) ;
     
    $zone_saisie = $fenetre -> Entry ( -textvariable => \$texte ,
    						-validate => 'key',
    						-validatecommand => \&Test,
    						-bg => 'yellow') ;
     
    $btn_quitter = $fenetre -> Button ( -text => 'Quitter' , -command => \&QuitterApplication ) ;
     
    $message -> pack ( ) ;
    $zone_saisie -> pack ( ) ;
    $btn_quitter -> pack ( ) ;
     
    MainLoop ( ) ;

  4. #4
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par VinnieMc
    Salut, comme j'ai dit dans mon premier poste, je n'ai pas envie de passer par un bouton d'évaluation, je voudrais que la valeur du widget Entry soit constamment testée.
    Alors, il te faut "binder" ton action de recherche pour qu'elle soit lancée à chaque frappe au clavier dans le "Entry". Ce ne doit pas être monstrueusement difficile (je n'ai pas pratiqué Perl-Tk depuis des années, désolé).

    Citation Envoyé par VinnieMc
    J'ai réussi à faire un truc qui s'en rapproche, mais il y a encore quelques erreurs que je n'arrive pas à régler. La première, c'est que je dois taper au moins deux lettres avant que ne soit affiché le mot qui commence par ces lettres,alors qu'une lettre suffirait. Et j'aimerais aussi que soit affichés tous les mots qui commencent par les lettres, par exmple "ma" afficherait "marcher" et "maison".
    Alors reprends ce que je t'ai indiqué, avec le grep et un join ensuite.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Je me demande si Tk::Event ne proposerait pas quelque chose dans ce gout là ?

  6. #6
    Membre habitué Avatar de VinnieMc
    Inscrit en
    Décembre 2005
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 208
    Points : 161
    Points
    161
    Par défaut
    J'ai essayé ce que tu as dit 2EurosCents:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    my @tableau=('manger','parler','il','nager','marcher','clavier','brahim','maison');
     
     
    sub Test{
     
    my @selection = grep(m/^$texte/, @tableau);
    $mot=join("\n", @selection);
     
    }
    et je ne comprends pas pourqoi lorsque je tape "m" dans la zone de saisie, tous les élements de mon tableau s'affichent et pas seulement ceux qui commencent par un "m".

  7. #7
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par VinnieMc
    J'ai essayé ce que tu as dit 2EurosCents:
    et je ne comprends pas pourqoi lorsque je tape "m" dans la zone de saisie, tous les élements de mon tableau s'affichent et pas seulement ceux qui commencent par un "m".
    Parce que ton "m" n'est visiblement pas pris en compte.

    Si tu fais $texte="m", juste avant l'appel à Test, ta fonction remplit $mot avec ça :
    Code text : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    manger
    marcher
    maison

    C'est donc correct.

    Ce qu'il te manque, c'est le "bonding" pour intercepter l'événement "saisie" dans ton "entry", fixer la variable et lancer ta fonction à chaque modification.

    Bon courage.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

Discussions similaires

  1. Affichage d'un label en fonction d'un tableau bd
    Par oOoOuuhmAn dans le forum AWT/Swing
    Réponses: 14
    Dernier message: 02/03/2006, 16h00
  2. affichage simultané de deux graphiques en Gnuplot
    Par Makino dans le forum Tkinter
    Réponses: 2
    Dernier message: 01/03/2006, 09h56
  3. Affichage simultané des images
    Par gregbart dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 11/01/2006, 17h13
  4. Affichage simultané des images
    Par gregbart dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 11/01/2006, 08h39
  5. Affichage du contenu label
    Par ghyosmik dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 21/09/2005, 12h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo