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] TK:tlist


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] TK:tlist
    Bonjour, j'ai récupéré un script sur le site suivant http://lionel.romain.free.fr/tlist.html, qui propose un cours sur perl tk, mais lorsuqe je test le script qui est présenté :

    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
    use Tk ;
    use Tk::TList;
     
    @villes = qw ( Rouen Caen Cherbourg Bayeux Carentan Lisieux Falaise Argentan Saint-Lô Granville ) ;
     
    sub ChoixVille
    {
       print "Ville choisie : " , $villes[$lt_villes -> info ( selection )] , "\n" ;
    }
     
    # main
     
    $fenetre = new MainWindow ( ) ;
    $fenetre -> title ( 'Villes' ) ;
     
    $lt_villes = $fenetre -> TList ( 
                                     -orient => 'vertical' , 
                                     -selectmode => 'single' ,
                                     -command => \&ChoixVille 
                             );
     
    foreach $ville ( @villes )
    {
      $lt_villes -> insert ( 'end' , -itemtype => 'text' , -text => $ville ) ;
    }
    $lt_villes -> pack ( -expand => 1 , -fill => 'both' ) ;
     
    MainLoop ( ) ;
    j'obtiens l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Use of reference "ARRAY(0x1ab8d2c)" as array index at TKList.pl line 8.
    je ne comprends pas le fait que cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $villes[$lt_villes -> info ( selection )]
    ne fonctionne pas alors que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     print $lt_villes -> info ( selection )
    me donne bien l'indice de l'element sur lequel je double clique (0,1 ou 2 etc.);

    par conséquent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $villes[$lt_villes -> info ( selection )]
    devrait être égale à si je clique sur le premier element, 1 sur le second etc.

    Merci

    Je suis sous windows vista / activeperl 5.8.8

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Tout d'abord : ON NE POSTE PAS SUR CE FORUM, on poste dans les sous-forums, comme indiqué dans le premier message "Important" sur ce forum (le sujet est en majuscule et c'est le premier sujet sur le forum, est-ce si difficile d'y jeter un coup d'oeil ??), je te déplace dans le sous-forum Module, mais fais un effort la prochaine fois !!

    Il est pas très propre ce code... Pas de pragma "strict", ni de "warnings", un bareword selection, très espacé, mais à mon avis pas vraiment heureusement (séparer ainsi l'objet de la méthode me semble nuisible à la lisibilité, enfin les goûts et les couleurs ).
    Voici un code qui marche, et plus propre :
    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
    #!/usr/bin/perl
    use strict; use warnings;
     
    use Tk;
    use Tk::TList;
     
    my @villes = qw ( Rouen Caen Cherbourg Bayeux Carentan 
                      Lisieux Falaise Argentan Saint-Lô Granville ) ;
     
    # main
     
    my $mw = new MainWindow( ) ;
    $mw->title( 'Villes' ) ;
     
    my $lt_villes = $mw->TList( 
                                     -orient => 'vertical' , 
                                     -selectmode => 'single' ,
                                     -command => \&choix_ville 
                             );
     
    foreach my $ville ( @villes )
    {
        $lt_villes -> insert ( 'end' , -itemtype => 'text' , -text => $ville ) ;
    }
    $lt_villes -> pack ( -expand => 1 , -fill => 'both' ) ;
     
    MainLoop ( ) ;
     
    # useful subs
     
    # callbacks
     
    sub choix_ville
    {
       print "Ville choisie : " , @villes[$lt_villes->info('selection')] , "\n" ;
    }
     
    __END__
    Tu remarqueras le changement de sigil (@ au lieu de $) devant villes, en temps normal tu aurais raison de mettre $, mais ici cela entraîne que "$lt_villes->info('selection')" est exécuté en contexte scalaire où cette méthode renvoie une référence à un tableau. Le @ signifie qu'on demande une tranche du tableau @villes, donc on a un tableau d'indices entre les [], donc $lt_villes->info('selection') est exécuté en contexte de tableau, où il renvoie bien une liste (ici constituée d'un seul élément).

    Tu as une autre solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sub choix_ville
    {
       print "Ville choisie : " , $villes[$lt_villes->info('selection')->[0]] , "\n" ;
    }
    --
    Jedaï

  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
    Merci infiniment pour le script corrigé, et mille excuses pour ne pas avoir posté au bon endroit je ferai attention la prochaine fois.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  2. [langage] Inclure de perl en c !!!
    Par ryo00 dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2002, 10h03
  3. Réponses: 2
    Dernier message: 30/05/2002, 08h54
  4. [réseaux] Bench en Perl pour avoir le débit entre 2 pc
    Par Frich dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 22/05/2002, 17h22
  5. [web] Cherche un conseil pour un livre perl-tk
    Par Anonymous dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 29/04/2002, 15h35

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