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 :

défilement automatique de scrollbar


Sujet :

Interfaces Graphiques Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Points : 30
    Points
    30
    Par défaut défilement automatique de scrollbar
    Bonjour,

    j'aimerais que la scrollbar défile automatiquement au fur et à mesure du texte qui s'affiche (afin que l'on ne doive pas la descendre pour voir les dernières lignes qui viennent de s'afficher)
    J'ai trouvé ce script sur le net (je ne sais plus où) qui affiche une centaine de ligne mais où la scroll ne défile pas.
    Je n'arrive pas à le modifer pour faire ce que je veux.
    Si quelqu'un a une idée?
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    use Tk;
     
    my $fenetre_principale = MainWindow->new( -title => 'Test' );
    my $widget_texte = $fenetre_principale->Scrolled('Text',
      -scrollbars => 'osoe',
      -background => '#F3EFFF',
    )->pack( );
    for (1..100) {
      $widget_texte->insert('end', "$_ : Ligne $_ : exemple\n");
    }
     
    MainLoop;

  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

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    merci, je me bornais a chercher un sujet "défilement scrollbar" alors que la réponse était sous "voir une ligne d'un widget".

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    en fait non, ça ne va pas avec ce que je veux faire, j'ai mis un mauvais exemple.
    En fait, dans mon code, il faudrait que la barre défile suite à l'insertion d'une longue listbox et d'un bouton. Voici un exemple simplifié:
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    use Tk;
    use Tk::Pane;
     
    ####  Mainwindow  #########
    my $mw = MainWindow->new(-title => 'liste personne');
    $mw->minsize (400,400);
     
    #scrollbar
    my $scroll_bar = $mw->Scrolled('Pane',
      -scrollbars => 'e',
    )->pack(-expand => 1, -fill => 'both');
     
    my $system = $scroll_bar->Label(
      -text => "Qui choisis-tu?",
      -relief     => 'raised',
      -background => 'white'
    )-> pack;
     
     
    my $list = $scroll_bar->Listbox(-height=> '25')->pack;
    my $bouton_OK = $scroll_bar->Button(-text=> 'OK')->pack;
    $list->insert('end','lucie','abdel','francois','bernard','camille','emilie','geraldine','agathe','karim','manu','bruno','jean-michel','nico','vincent','delphine','jerome','serge','jeremie','sebastien','julien','alex','solange','colette','pan','chloé');
     
    MainLoop;
    Suite à la pression du bouton OK, d'autres longues listes apparaissent, etc...

    comme les widgets listbox et button ne sont pas des widgets textes, le see ne fonctionne pas et l'utilisateur devra donc chaque fois descendre la barre pour aller cliquer.
    Est ce que tu as une autre astuce?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    Sur ce site (http://www.ida.liu.se/~tompe/perltk/listbox.htm), ils stipulent que l'option "see" est dispo pour les listbox.
    Cependant, quand je rajoute dans le code du post précédent, rien ne se passe.
    Je n'arrive pas à trouver d'alternative.

  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
    Il faut éviter de regarder n'importe quel site parlant de la documentation officielle. Si tu veux en savoir plus sur un widget, regarde la doc CPAN du widget, exemple : Tk::Listbox.

    Sinon, donne nous déjà un exemple clair et surtout cohérent par rapport à ce que tu dis. Ton code ci-dessus a un bouton qui ne sert à rien. Difficile de tester tes dires .

    ta listbox doit être scrollée si tu veux voir les longues listes. Puis la méthode see doit être utilisée au moment du clic sur le bouton.

    Exemple :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    use Tk;
    use Tk::Pane;
     
    ####  Mainwindow  #########
    my $mw = MainWindow->new( -title => 'composition lignin chain' );
    $mw->minsize( 400, 400 );
     
    #scrollbar
    my $scroll_bar = $mw->Scrolled( 'Pane', -scrollbars => 'oe', )->pack( -expand => 1, -fill => 'both' );
     
    my $system = $scroll_bar->Label(
      -text       => "Qui choisis-tu?",
      -relief     => 'raised',
      -background => 'white'
    )->pack;
     
    my $list = $scroll_bar->Scrolled(
      'Listbox',
      -height     => '25',
      -scrollbars => 'ow',
    )->pack;
    my $bouton_OK = $scroll_bar->Button(
      -text    => 'OK',
      -command => [ \&insertion, $list ],
    )->pack;
     
    MainLoop;
     
    sub insertion {
      my $list = shift;
      $list->insert(
        'end',         'lucie',     'abdel',   'francois', 'bernard', 'camille',
        'emilie',      'geraldine', 'agathe',  'karim',    'manu',    'bruno',
        'jean-michel', 'nico',      'vincent', 'delphine', 'jerome',  'serge',
        'jeremie',     'sebastien', 'julien',  'alex',     'solange', 'colette',
        'pan',         'chloé'
      );
      $list->see('end');
      return;
    }

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    J'essaie tellement de simplifier les codes que j'insère pour que ce soit clair que cela produit l'effet contraire.

    Voila les evenements:
    - une longue liste apparait. Dans un souci de pratique, j'aimerais que lorsqu'elle apparait la scrollbar de la fenetre principale descende toute seule afin qu'on ait pas à le faire manuellement pour voir le bouton OK. (c'est comme quand on ecrit dans un éditeur de texte, l'éditeur ne reste pas figé, il descend au fur et à mesure qu'on écrit afin de voir justement ce qu'on écrit).
    - on choisit une personne dans la liste
    - on appuie sur OK
    - suivant ce que l'on a choisi, une autre longue liste apparait et de nouveau le problème, il faut descendre manuellement la scrollbar pour atteindre le bouton OK

    J'ai refait l'exemple précédent moins simplifié afin que vous rendiez compte de mon problème. Il reste cependant simplifié du fait qu'il affiche toujours la meme liste et qu'il n'y pas de condition de sortie mais ces détails n'empechent pas de comprendre ce que je veux faire.

    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    use Tk;
    use Tk::Pane;
     
    ####  Mainwindow  #########
    my $mw = MainWindow->new(-title => 'liste personne');
    $mw->minsize (400,400);
     
    #scrollbar
    my $scroll_bar = $mw->Scrolled('Pane',
      -scrollbars => 'e',
    )->pack(-expand => 1, -fill => 'both');
     
    my $system = $scroll_bar->Label(
      -text => "Qui choisis-tu?",
      -relief     => 'raised',
      -background => 'white'
    )-> pack;
     
    &LIST;
     
    MainLoop;
     
    sub LIST { 
      my $list = $scroll_bar->Listbox(-height=> '25')->pack;
      my $bouton_OK = $scroll_bar->Button(-text=> 'OK')->pack;
      $list->insert('end','lucie','abdel','francois','bernard','camille','emilie','geraldine','agathe','karim','manu','bruno','jean-michel','nico','vincent','delphine','jerome','serge','jeremie','sebastien','julien','alex','solange','colette','pan','chloé');
     
      $bouton_OK->configure(
        -command => sub {
          my $ID=$list->curselection();
          my $pers=$list->get($ID);
          my $lign = $scroll_bar->Label(
            -text => "Vous avez choisi $pers.",
            -relief     => 'raised',
            -background => 'white'
          )-> pack; 
          &LIST;
        }
      );
    }
    Djibril, je viens de comprendre avec ton post précédent que le see de listbox permet de voir un élément de liste si la liste est scrollée avec une hauteur inferieure au nombre d'élément ce qui n'est pas du tout ce que je veux faire. En fait il faudrait que je trouve quelquechose qui fasse une sorte de $mw->see('end') lors de l'apparition de la liste.

    En espérant avoir été plus clair.

  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 ce cas, c'est plus un souci de conception. La méthode see sur une fenêtre n'existe pas.
    tu devrais plutôt opter pour une listbox moins grande. Au lieu de mettre une hauteur de 25, tu devrais mettre une hauteur de 15 par exemple.

    Pour ton exemple pris sur les éditeurs, quand tu tape ton texte, tu es dans un widget de type Text (et non ListBox) .

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par djibril Voir le message
    Dans ce cas, c'est plus un souci de conception. La méthode see sur une fenêtre n'existe pas.
    tu devrais plutôt opter pour une listbox moins grande. Au lieu de mettre une hauteur de 25, tu devrais mettre une hauteur de 15 par exemple.
    Cela ne change rien, meme en diminuant la taille de la list, après l'apparition de la 3 eme liste, je suis obligé de descendre manuellement la scrollbar de la fenetre principale pour voir le bouton OK.
    Sachant que dans mon vrai script, il apparait entre 20 et 50 listes, descendre manuellement la scrollbar pour cliquer sur OK 50 fois deviens vite énervant.

  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
    Je ne vois vraiment pas l'intérêt d'afficher autant de listes à la suite ! Ca n'a pas de sens. Quel est le but de ton interface graphique ?

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    ça n'a pas de sens dans l'exemple que je mets mais pour ce que je veux faire oui.
    C'est pour construire une chaine d'éléments. Après avoir choisit un élément, il apparait une liste contenant les éléments qui peuvent être gréffés à la suite de celui que l'on vient de choisir et ainsi de suite.(la possibilité de greffage entre 2 éléments depend de beaucoup de condition, ce qui engendre des listes toutes différentes les unes des autres)
    Sachant que mes chaines font entre 20 et 50 éléments, il apparaitra donc en tout entre 20 et 50 listes. (Ces listes n'apparaissent pas en meme temps, une seule liste apparait, on choisit, une liste apparait, on choisit, etc)

  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
    Dans ce cas, il faudrait que la liste apparaissant supprime l'ancienne.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    Exactement. Et c'est pour cela que dans un précédent sujet (http://www.developpez.net/forums/d10.../update-liste/), je demandais comment updater une liste. Et dans cette direction aussi je n'arrive pas à trouver de solution.

  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
    Bah tu supprimes le contenu de la liste et réinsert de nouvelles données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $listbox->delete('1.0', 'end')

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    Finalement ça ne va pas, le fait d'effacer la liste précédente pour réintroduire les nouveaux éléments m'oblige à faire de même avec le texte qui l'accompagne. De ce fait, tout s'efface, il ne reste plus de trace de ce que l'utilisateur à fait précédemment, il risque donc ne plus savoir où il se trouve.
    J'ai donc incorporé ton code de gestion de la molette (http://www.developpez.net/forums/d87...olette-souris/) afin qu'il puisse l'utiliser pour descendre/monter la fenetre à défaut d'avoir un défilement automatique.
    merci

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

Discussions similaires

  1. "scrollbar" avec défilement automatique dans listbox
    Par nanettemontp dans le forum Windows
    Réponses: 4
    Dernier message: 15/10/2007, 10h44
  2. Défilement automatique d'un StringGrid
    Par ero-sennin dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/06/2006, 00h53
  3. Position du défilement de la scrollbar d'un select
    Par Eagle959 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/03/2006, 21h33
  4. [Stratégie] Défilement automatique de texte
    Par speedster dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 18/07/2005, 14h56
  5. [BCB5] Défilement automatique des scroll bars
    Par Christophe Brun dans le forum C++Builder
    Réponses: 2
    Dernier message: 05/12/2004, 16h59

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