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 :

affichage d'image et de texte


Sujet :

Interfaces Graphiques Perl

  1. #1
    Membre habitué Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Points : 186
    Points
    186
    Par défaut affichage d'image et de texte
    Hello,

    Je n'arrive pas à faire afficher une image.

    mon script, liste les dossiers, lorsque que l'on clic (par exemple) sur Titanic.avi alors le résumé s'affiche en dessous et la jacquette du film à coté (il y a pour chaque titre Titanic.avi, Titanic.txt, Titanic.jpg)

    Le problème est que je n'arrive pas à faire afficher l'image... j'ai repèré dans le script par
    ## ICI
    la ou ça pose problème...


    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    #!/usr/local/bin/perl
     
    use strict;
    use Tk;
    use Tk::DirTree;
    use TK::Photo;
    use TK::JPEG;
     
    my $mw = MainWindow->new(-title=>'OUEP');
    $mw->geometry("1200x1000+60+30");
     
    # INITIALISATION DES VARIABLES
    my ($lst_f, $lst_r, $elem, $retour,$repertoire, $affiche, $objet_affiche);
    my(@files);
     
    # DEFINITION DES CADRE-BOX
    $lst_f = $mw->Scrolled(
      "Listbox",
      -scrollbars => 'e',
      -background => 'white',
      -foreground =>"black",
    )->place( -x => 410, -y => 30, -width => 350, -height => 300, );
     
    $lst_f->bind( "<Button-1>", \&list_select );
     
    $lst_r  = $mw->Scrolled('DirTree',-scrollbars =>'e',-directory=>"C:/Documents and Settings/xxxx/Bureau/tempo/films", ## chemin
                                      -command=>\&repertoire)->place( -x => 30, -y => 30, -width => 350, -height => 300, );
    $lst_r->configure(-background =>"lightblue", -foreground =>"#CC0063", -showhidden=>1) ;
    $lst_r->Subwidget("yscrollbar")->configure(-background => "lightgreen",-troughcolor => "blue") ;
     
    # AFFICHE LE RESUME
    $mw->Label(
      -textvariable => \$retour,
      -justify      => 'left',
      -foreground   => '#CC0063'
    )->place( -x => 100, -y => 370, );
     
    # AFFICHE L'AFFICHE
    $objet_affiche = $mw->Photo( -file => $affiche ); ## ICI
    $mw->Label(                                                    ## ICI
      -image => $objet_affiche,                                ## ICI
    )->place( -x => 780, -y => 30, );                        ## ICI
     
    sub list_select {
      $elem = '';
      $affiche ='';
      my @select = $lst_f->curselection();
      $elem = $lst_f->get( $select[0] );
      $elem =~ /(.*)\.\w{3,4}/;
      $elem = $1;
      $affiche = $elem.".jpg";                                  ## ICI
      $elem .= ".txt";
     
      open IN, "<$elem" or die "$!";
     
      while ( my $line = <IN> ) {
        $retour .= $line;
        }
    }
     
     
    sub repertoire
    {
      my $nd=shift;
      chdir $nd;
      $repertoire=$nd;
      @files=() ;
      $lst_f->delete(0,'end') ;
      my @allfiles=() ;
      opendir DH,$nd ;
      @allfiles=readdir DH ;
      closedir DH ;
      foreach (@allfiles)
      {
        if(-f $_ && $_ !~ /\.(txt|pl|exe|mp3|aac|jpg|gif)/)
        {
          push(@files,$_) ;
          $lst_f->insert('end',$_) ;
        }
      }
    }
     
     
    $mw->Button(
      -text    => 'Quitter',
      -command => sub { $mw->destroy() },
    )->place( -x => 900, -y => 900, );
     
     
    MainLoop;


    Merci pour votre future aide...
    Windows 7, 64 bit
    Perl 5.12, ActivePerl
    Python 3.2, ActivePython ( NOVICE ! )

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Au moment où perl arrive sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $objet_affiche = $mw->Photo( -file => $affiche );
    $affiche est vide, donc forcément, ça ne peut pas fonctionner.

  3. #3
    Membre habitué Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Points : 186
    Points
    186
    Par défaut
    Je voulais faire ça mais ça n'a pas fonctionné...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $objet_affiche = $mw->Photo( -file => \$affiche );
    Windows 7, 64 bit
    Perl 5.12, ActivePerl
    Python 3.2, ActivePython ( NOVICE ! )

  4. #4
    Membre habitué Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Points : 186
    Points
    186
    Par défaut
    Ayé !!

    j'ai déplacé dans le SUB et c'est tout bon...

    Merci !
    Windows 7, 64 bit
    Perl 5.12, ActivePerl
    Python 3.2, ActivePython ( NOVICE ! )

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Citation Envoyé par PadawanInPerl Voir le message
    Je voulais faire ça mais ça n'a pas fonctionné...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $objet_affiche = $mw->Photo( -file => \$affiche );
    Normal, ce n'est pas prévu . Il faut changer ta logique dans le programme.

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Citation Envoyé par PadawanInPerl Voir le message
    Ayé !!

    j'ai déplacé dans le SUB et c'est tout bon...

    Merci !

  7. #7
    Membre habitué Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Points : 186
    Points
    186
    Par défaut Une dernière hihihi
    Comment fait-on pour vider le label en cours...car quand je clique sur un fichier et que l'image s'affiche et que je change, il reste en dessous l'ancienne image !

    J'ai initialisé les variables mais rien y fait...

    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
    sub list_select {
      $elem = '';
      $affiche ='';
      $retour ='';
      $objet_affiche = '';
     
      my @select = $lst_f->curselection();
      $elem = $lst_f->get( $select[0] );
      $elem =~ /(.*)\.\w{3,4}/;
      $elem = $1;
      $affiche = $elem.".jpg";
      $elem .= ".txt";
     
    # AFFICHE L'IMAGE
    $objet_affiche = '';
    $objet_affiche = $mw->Photo( -file => $affiche );
    $mw->Label(
      -image => $objet_affiche,
    )->place( -x => 780, -y => 30, );
     
      open IN, "<$elem" or die "$!";
     
      while ( my $line = <IN> ) {
        $retour .= $line;
        }
    }
    Peux-tu me filer encore un coup de (pouce, bien sûr )
    Windows 7, 64 bit
    Perl 5.12, ActivePerl
    Python 3.2, ActivePython ( NOVICE ! )

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $LABEL = $mw->Label(
      -image => $objet_affiche,
    )->place( -x => 780, -y => 30, );
    Tu dois reconfigurer ton label via la méthode configure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $LABEL->configure( -image => $OBJET );
    A toi de voir à quel moment tu le reconfigures (dans un appel bouton ou autre événement.

  9. #9
    Membre habitué Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Points : 186
    Points
    186
    Par défaut
    Merci,

    Je teste ça
    Windows 7, 64 bit
    Perl 5.12, ActivePerl
    Python 3.2, ActivePython ( NOVICE ! )

  10. #10
    Membre habitué Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Points : 186
    Points
    186
    Par défaut
    Je pensais que juste après la sélection du fichier ça irait...mais pas

    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
    sub list_select {
     
      $elem = '';
      $affiche ='';
      $retour ='';
      my @select = $lst_f->curselection();
      $elem = $lst_f->get( $select[0] );
     
      $LABEL->configure( -image => $objet_affiche ); ## ICI
     
      $elem =~ /(.*)\.\w{3,4}/;
      $elem = $1;
      $affiche = $elem.".jpg";
      $elem .= ".txt";
     
    # AFFICHE L'IMAGE
     
    $objet_affiche = $mw->Photo( -file => $affiche );
    $LABEL = $mw->Label(
      -image => $objet_affiche,
    )->place( -x => 780, -y => 30, );
     
      open IN, "<$elem" or die "$!";
     
      while ( my $line = <IN> ) {
        $retour .= $line;
        }
     
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Tk::Error: Can't call method "configure" on an undefined value at C:\DOCUME~1\xxx\Bureau\tempo\films\tree.pl line 53.
     main::list_select at C:\DOCUME~1\xxx\Bureau\tempo\films\tree.pl line 53
     <Button-1>
     (command bound to event)
    Windows 7, 64 bit
    Perl 5.12, ActivePerl
    Python 3.2, ActivePython ( NOVICE ! )

  11. #11
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    J'ai l'impression que tu ne comprends pas ce que tu écrit et tâtonnes. Tu auras du mal à comprendre correctement le fonctionnement de Tk en évoluant ainsi.

    Mets toi à la place de perl. Ligne 9, Perl lit la ligne, sauf qu'à ce moment, il ne connait pas $LABEL donc comment veux-tu que ça fonctionne . De plus, au vu de ton code, la logique n'intervient pas.

    Que souhaites-tu concrètement faire ? A quel moment, l'image doit changer ? Elle doit être remplacée par laquelle ? Et la première fois, quelle image s'affiche ? Bref, élabore toi un algo simple sur papier car le talonnement ne te fera que perdre du temps.

  12. #12
    Membre habitué Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Points : 186
    Points
    186
    Par défaut
    En fait...je pige pas pourquoi le fonctionnement de l'affichage du texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # AFFICHE LE RESUME
    $mw->Label(
      -textvariable => \$retour,
      -justify      => 'left',
      -foreground   => '#CC0063'
    )->place( -x => 100, -y => 370, );
    est différent du fonctionnement de l'affichage de l'image...

    Plus haut tu m'as dit que l'affichage de l'image ne pouvait pas fonctionner car à ce moment là la variable était vide (et que \$affiche ne fonctionnait pas) alors que je fais la même chose avec le texte...il est utilisé plus haut mais est appelé pas \$retour...et lui, marche
    Windows 7, 64 bit
    Perl 5.12, ActivePerl
    Python 3.2, ActivePython ( NOVICE ! )

  13. #13
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Perl Tk ne gère pas l'affichage d'un texte de la même façon qu'une image.
    Pour les texte, l'option textvariable permet à Tk de garder l'adresse mémoire de la variable contenant le texte. Pour les images, ce n'est pas possible et ça ne fonctionne pas ainsi et c'est tout. Pour changer l'image, il faut recréer l'objet image et l'assigner de novo à ton Label. et pour ne pas avoir de fuite de mémoire, il faudrait même supprimé du coup l'ancien objet pour que Tk ne garde pas x image en mémoire ne lui servant à rien.

  14. #14
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Je te propose que tu nous rédige ce que tu souhaites faire dans les détails avec des mots simples.

  15. #15
    Membre habitué Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Points : 186
    Points
    186
    Par défaut
    Ok, je vais relire tes conseilles et reprendre calmement...

    Je reviens vers toi demain...Si tu auras encore la force de me répondre
    Windows 7, 64 bit
    Perl 5.12, ActivePerl
    Python 3.2, ActivePython ( NOVICE ! )

  16. #16
    Membre habitué Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Points : 186
    Points
    186
    Par défaut
    Lorsque je sélectionne un fichier, l'image et le texte s'affiche.

    Lorsque je sélectionne un autre fichier, l'image se met par dessus l'autre, la zone de texte, elle, se recharge avec les nouvelles données.

    Evidemment j'aimerais, que lorsque je sélectionne un autre fichier, l'ancienne image disparaisse pour laisser la place à la nouvelle.
    Windows 7, 64 bit
    Perl 5.12, ActivePerl
    Python 3.2, ActivePython ( NOVICE ! )

  17. #17
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Il faut détruire l'ancienne.

  18. #18
    Membre habitué Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Points : 186
    Points
    186
    Par défaut Résolu
    Merci Djibril pour tes conseils et ta patience...

    Pour suivre ce que tu m'as dit...J'ai déclaré au-dessus de mon SUB le label pour l'image pour pouvoir la détruire dans le SUB puis la recréer.

    et ça marche
    Windows 7, 64 bit
    Perl 5.12, ActivePerl
    Python 3.2, ActivePython ( NOVICE ! )

  19. #19
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    ouais, cette méthode aussi fonctionne, vu que tu utilises place, et donc repositionne le label au même endroit, c'est ok. Mais dans un autre contexte, cette technique ne serait pas adaptée. L'idéal aurait été que tu supprimes l'image et non le label, puis reconfigure le label, ainsi, le label est crée une fois pour de bon, et au fil des clics, tu supprimes uniquement l'image afin d'en afficher une nouvelle. C'est clair ?

  20. #20
    Membre habitué Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Points : 186
    Points
    186
    Par défaut
    OUI, je te remercie...je vais essayé également dans ton sens.
    Windows 7, 64 bit
    Perl 5.12, ActivePerl
    Python 3.2, ActivePython ( NOVICE ! )

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

Discussions similaires

  1. Affichage d'images selon un nombre fourni dans un fichier texte
    Par grisby007 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/03/2015, 21h20
  2. Affichage de 2 images entourant du texte
    Par BakaOnigiri dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 14/10/2010, 11h20
  3. Problème d'affichage entre image et texte
    Par neoxtra dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 26/01/2009, 13h32
  4. [html] pbs: pour qu'une image suive le texte,affichage d'img
    Par dardadax dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 29/06/2007, 14h14
  5. [VB6] Affichage d'image avec qlq contraintes
    Par youri dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/11/2002, 14h44

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