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'un code html dans un widget texte en perl


Sujet :

Interfaces Graphiques Perl

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 18
    Points : 9
    Points
    9
    Par défaut Affichage d'un code html dans un widget texte en perl
    Bonjour,
    J'ai essayé de faire une petite interface graphique en perl où j'ai inséré un widget texte pour l'affichage du code html d'une page web. J'ai constaté que l'affichage du code html se fais correctement lorsqu'il n'est pas long, par contre lorsque la source html de la page est assez longue alors le code ne s'affiche pas complètement. Pour moi je disais ce problème est lié à la taille du code (nombre de lignes du code html qui dépasse le nombre de lignes du widget texte?).
    J'aimerai bien savoir comment régler ce problème.
    Merci.

  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
    Qu'entends tu par interface graphique ? Tu fais du CGI, ou bien un GUI avec perl Tk ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par djibril Voir le message
    Qu'entends tu par interface graphique ? Tu fais du CGI, ou bien un GUI avec perl Tk ?
    J'utilise perl tk.
    Merci.

  4. #4
    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
    Peux tu nous montrer ton code ?

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par djibril Voir le message
    Peux tu nous montrer ton code ?
    Bonjour,
    Je vous donne ci-après un fragment du code illustrant mon cas, et je vous mets 2 url différentes comme exemples :
    1- http://www.isi.edu/info-agents/RISE/LAW/cuban.law.html : Le code s'affiche
    correctement.
    2- http://www.isi.edu/info-agents/RISE/...apple_pan.html : Le code est
    partiellement affiché.

    - Vous pouvez choisir parmi l'une des 2 url en sélectionnant dans une liste de
    choix.
    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
    use Tk;
    use Tk::LabFrame;
    use Tk::BrowseEntry;
    use warnings;
    use strict;
    use locale;
    use LWP::Simple;
     
    #la fenetre principale du projet
    my $main = MainWindow->new( -title => 'Extraction D Information A Partir Du Web');
    $main->minsize( 860,600 );
     
    #insertion d'un frame
    my $frame1 = $main->LabFrame(-label => "Exemple d'affichage du code html",-background => 'gray',)->pack( qw/ -fill both -expand 1/ );
     
    #insertion d'un label de l url
    my $label = $frame1->Label( -text => 'Saisir une url ici :',
    	        )->place( -x => 5, -y => 30);
     
    #insertion d'une zonde de saisie pour l'url
    my $url;
    my $zone_url = $frame1->BrowseEntry(-variable =>\$url,
     		-width => 30,
    	    )->place( -x => 85, -y => 30);
    #insertion des 2 url comme exemples dans la liste url
    $zone_url->insert('end','http://www.isi.edu/info-agents/RISE/LAW/cuban.law.html');
    $zone_url->insert('end','http://www.isi.edu/info-agents/RISE/Zagat/apple_pan.html');
     
    #insertion des bouttons	    
    my $afficher = $frame1->Button( -text => 'Afficher_code_html', -background =>"grey" ,-borderwidth => 5,-relief => 'raised',-foreground =>"blue" ,-font => '{Garamond} 10',
                           -command => sub {my $texte1 = $frame1->Scrolled('Text',-scrollbars => 'osoe',-background => '#F3EFFF',)
                           ->place( -x => 600, -y =>10 );my $codehtml = get($url);$texte1->insert("end",$codehtml);},)->place(-x => 5, -y => 60);
    my $quitter = $frame1->Button( -text => '         Quitter         ', -background =>"grey" ,-borderwidth => 5,-relief => 'raised',-foreground =>"blue" ,-font => '{Garamond} 10',
                          -command => sub {$main->destroy;},)->place(-x => 125, -y => 60);
     
    MainLoop;
    Merci.

  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
    Bonjour,

    Je pense que vous avez fait quelques mauvais choix de conception :

    • L'utilisation du gestionnaire d'emplacement place n'est pas judicieux, pack ou grid suffirait largement.
    • A chaque clic sur le bouton "afficher HTML", vous créez un widget Text s'empilant sur le(s) précédent(s) via place. Ce qui alourdit l'application et consomme énormément de mémoire. Il aurait était judicieux d'afficher indépendamment le widget text et ensuite d'effacer son contenu et ré-afficher un autre à chaque clic.
    • L'utilisation de l'option wrap peut vous permettre d'améliorer l'affichage du text dans le widget.


    Pour plus d'explications, vous pouvez consulter notre FAQ perl/Tk.

    Voici votre code refait avec grid et en utilisant Tk::Dressing qui permet d'appliquer un habillage au choix.

    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
    #!/usr/bin/perl
    use strict;
    use warnings;
    use Tk;
    use Tk::LabFrame;
    use Tk::BrowseEntry;
    use LWP::Simple;
    use Tk::Dressing;
     
    #la fenetre principale du projet
    my $main = MainWindow->new( -title => "Extraction D'Information A Partir Du Web" );
    $main->minsize( 860, 600 );
     
    #insertion d'un frame
    my $frame1 = $main->LabFrame(
      -label      => "Exemple d'affichage du code html",
      -background => 'gray',
    )->pack(qw/ -fill both -expand 1/);
     
    #insertion d'une zonde de saisie pour l'url
    my $url;
    my $zone_url = $frame1->BrowseEntry(
      -label      => 'Saisir une url ici :',
      -variable   => \$url,
      -background => '#F3EFFF',
      -choices    => [
        'http://www.isi.edu/info-agents/RISE/LAW/cuban.law.html',
        'http://www.isi.edu/info-agents/RISE/Zagat/apple_pan.html'
      ],
    );
     
    my $texte1 = $frame1->Scrolled(
      'Text',
      -scrollbars => 'osoe',
      -background => '#F3EFFF',
      -wrap       => 'none',
    );
     
    #insertion des bouttons
    my $afficher = $frame1->Button(
      -text        => 'Afficher_code_html',
      -background  => "grey",
      -borderwidth => 5,
      -relief      => 'raised',
      -foreground  => "blue",
      -font        => '{Garamond} 10',
      -command     => sub {
        my $codehtml = get($url);
        $texte1->delete( '1.0', 'end' );
        $texte1->update;
        $texte1->insert( 'end', $codehtml );
        $texte1->update;
        $texte1->see('end');
      },
    );
     
    my $quitter = $frame1->Button(
      -text        => '         Quitter         ',
      -background  => "grey",
      -borderwidth => 5,
      -relief      => 'raised',
      -foreground  => "blue",
      -font        => '{Garamond} 10',
      -command     => sub { $main->destroy; },
    );
     
    my $tk_dressing = Tk::Dressing->new();
    $tk_dressing->design_widget( -widget => $main, );
     
    $zone_url->grid(qw / -row 0 -column 0 -columnspan 2  -sticky nsew/);
    $afficher->grid(qw / -row 1 -column 0 /);
    $quitter->grid(qw / -row 1 -column 1 /);
    $texte1->grid(qw / -row 2  -column 0 -columnspan 2 -sticky nsew /);
     
    MainLoop;

  7. #7
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par djibril Voir le message
    Bonjour,

    Je pense que vous avez fait quelques mauvais choix de conception :

    • L'utilisation du gestionnaire d'emplacement place n'est pas judicieux, pack ou grid suffirait largement.
    • A chaque clic sur le bouton "afficher HTML", vous créez un widget Text s'empilant sur le(s) précédent(s) via place. Ce qui alourdit l'application et consomme énormément de mémoire. Il aurait était judicieux d'afficher indépendamment le widget text et ensuite d'effacer son contenu et ré-afficher un autre à chaque clic.
    • L'utilisation de l'option wrap peut vous permettre d'améliorer l'affichage du text dans le widget.


    Pour plus d'explications, vous pouvez consulter notre FAQ perl/Tk.

    Voici votre code refait avec grid et en utilisant Tk:ressing qui permet d'appliquer un habillage au choix.

    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
    #!/usr/bin/perl
    use strict;
    use warnings;
    use Tk;
    use Tk::LabFrame;
    use Tk::BrowseEntry;
    use LWP::Simple;
    use Tk::Dressing;
     
    #la fenetre principale du projet
    my $main = MainWindow->new( -title => "Extraction D'Information A Partir Du Web" );
    $main->minsize( 860, 600 );
     
    #insertion d'un frame
    my $frame1 = $main->LabFrame(
      -label      => "Exemple d'affichage du code html",
      -background => 'gray',
    )->pack(qw/ -fill both -expand 1/);
     
    #insertion d'une zonde de saisie pour l'url
    my $url;
    my $zone_url = $frame1->BrowseEntry(
      -label      => 'Saisir une url ici :',
      -variable   => \$url,
      -background => '#F3EFFF',
      -choices    => [
        'http://www.isi.edu/info-agents/RISE/LAW/cuban.law.html',
        'http://www.isi.edu/info-agents/RISE/Zagat/apple_pan.html'
      ],
    );
     
    my $texte1 = $frame1->Scrolled(
      'Text',
      -scrollbars => 'osoe',
      -background => '#F3EFFF',
      -wrap       => 'none',
    );
     
    #insertion des bouttons
    my $afficher = $frame1->Button(
      -text        => 'Afficher_code_html',
      -background  => "grey",
      -borderwidth => 5,
      -relief      => 'raised',
      -foreground  => "blue",
      -font        => '{Garamond} 10',
      -command     => sub {
        my $codehtml = get($url);
        $texte1->delete( '1.0', 'end' );
        $texte1->update;
        $texte1->insert( 'end', $codehtml );
        $texte1->update;
        $texte1->see('end');
      },
    );
     
    my $quitter = $frame1->Button(
      -text        => '         Quitter         ',
      -background  => "grey",
      -borderwidth => 5,
      -relief      => 'raised',
      -foreground  => "blue",
      -font        => '{Garamond} 10',
      -command     => sub { $main->destroy; },
    );
     
    my $tk_dressing = Tk::Dressing->new();
    $tk_dressing->design_widget( -widget => $main, );
     
    $zone_url->grid(qw / -row 0 -column 0 -columnspan 2  -sticky nsew/);
    $afficher->grid(qw / -row 1 -column 0 /);
    $quitter->grid(qw / -row 1 -column 1 /);
    $texte1->grid(qw / -row 2  -column 0 -columnspan 2 -sticky nsew /);
     
    MainLoop;
    Bonjour,
    J'ai essayé ce que tu m'as suggéré mais le problème reste toujours, en ce qui concerne la consommation de la mémoire je vois pas que le problème réside ici, car moi j'affiche le code html à chaque clic sur le bouton, et que j'ai bien déclaré les variable codehtml et texte comme étant locaux dans la fonction du bouton, ce qui permet de détruire leurs allocations de mémoire après la fin de leurs utilisation.
    Je pense que le problème réside dans la nature de la page web, je ne sais pas mais c'est une suggestion.
    Merci.

  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
    dans le code que je t'ai soumis il n'y a plus de soucis de mémoire car à chaque fois que tu clic sur le bouton, le widget Text est effacé et on y reaffiche le contenu de la page.

  9. #9
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Oui je comprends c'était juste une remarque à propos de mon code, mais je vois que ton code est plus clair et plus lisible.
    En passant, je ne sais pas si c'est possible de régler ce problème et d'afficher correctement le code, car quand j'affiche le code à partir d'un browser ( Affichage->Code source de la page ) se dernier s'affiche complètement mais quand j'essaye à partir de mon outil ca reste toujours incomplet.
    Merci.

  10. #10
    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
    qu'est ce qui diffère ?

  11. #11
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    À partir du browser ( Affichage->Code source ) le code est affiché jusqu'à </html> par contre quand j'utilise mon outil le code s'affichera jusqu'à la fin de la description, dans notre exemple est jusqu'à '"Quality Forever" isn't their motto for nothing.�'.
    Tu peux exécuter le code pour voir la différence.
    Merci.

  12. #12
    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
    En fait, en regardant le code source, on voit qu'après le texte t their motto for nothing.�, il y a un caractère bizarre FFFD. C'est lui qui pose sous à Tk. Il faut qu'on cherche de ce coté car sans Tk, perl affiche bien le contenu entier de la page.

  13. #13
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Salut Djibril,
    Oui vraiment tu as raison, je ne sais pas pourquoi je n'ai pas pensé à ça, donc on essaye de chercher la dessus peut être on trouvera quelque chose.
    Merci.

  14. #14
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Salut Djibril,
    Malheureusement le problème persiste toujours et je n'ai pas pu trouver la solution.
    J'espère que tu as cherché toi aussi de ton coté.
    j'attends s'il y en a des propositions.
    Merci.

Discussions similaires

  1. affichage du code html dans le contenu de mail
    Par fraizas77 dans le forum Langage
    Réponses: 1
    Dernier message: 23/02/2011, 23h19
  2. Problème affichage code html dans textEdit
    Par mercure07 dans le forum Qt
    Réponses: 5
    Dernier message: 10/09/2009, 10h59
  3. [MySQL] Stocker du code html dans une base
    Par g-ryckelynck dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 26/02/2007, 13h20
  4. code html dans du php
    Par dams78 dans le forum Langage
    Réponses: 6
    Dernier message: 17/03/2006, 11h06
  5. Insertion code html dans bdd
    Par jeff37 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/04/2004, 15h03

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