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. Ascenseurs bloqués.


Sujet :

Interfaces Graphiques Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Points : 61
    Points
    61
    Par défaut Perl Tk. Ascenseurs bloqués.
    Bonsoir.

    J'utilise Perl 5.8.4 sous Windows XP, en résolution 1024 x 768.

    Si vous exécutez le programme qui suit sous les mêmes conditions, vous obtiendrez une fenêtre avec notamment un bouton "Afficher".

    Cliquez sur ce bouton : le widget Text se remplit mais, bien qu'il soit impossible de lire tout son texte en une fois, ses ascenseurs restent "disabled".

    En revanche, si vous décommentarisez dans le programme deux instructions qui remplissent directement le widget Text avec la même chaîne de caractères que la première fois, les ascenseurs fonctionnent.

    D'autre part, si vous commentarisez la définition du widget Text (qui, dans l'état actuel du programme, applique ce widget sur un cadre) et décommentarisez une autre définition, qui aplique directement le widget Text sur la fenêtre principale, il n'y a pas de problème.

    Bug de Perl Tk, ou y a-t-il quelque chose qui m'échappe ?

    Merci pour tout avis.

    M.

    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
     
     
    use Tk;
    use warnings;
    use strict;
     
     
    my $mw = MainWindow->new;
    my $hauteurEcran = $mw->screenheight();
    my $largeurEcran = $mw->screenwidth();
     
    my $hauteurBarreDeTaches = ((30 * $hauteurEcran) - ((30 * $hauteurEcran) % 768))/ 768;
     # quotient entier de 30 * $hauteurEcran par 768.
    # Utiliser la fonction int ? La valeur 30 est présumée par moi.
     
    my $hauteurBarreDeTitre = ((30 * $hauteurEcran) - ((30 * $hauteurEcran) % 768))/ 768;
     # quotient entier de 30 * $hauteurEcran par 768. Utiliser la fonction int ? La valeur 30 est présumée par moi.
     
     
    my $hauteurLibreDansApplication = ($hauteurEcran - $hauteurBarreDeTaches) - $hauteurBarreDeTitre;
     
     
    my $largeurApplication = int( (95 * $largeurEcran) / 100);
    # Je ne prends que les 95/100 pour retirer
    # la largeur de l'espèce de barre de tâches
    # que l'utilisateur risque d'avoir à droite de son écran.
     
     
     
    $mw->configure(
          -width => $largeurApplication,
          -height => $hauteurLibreDansApplication);
     
     
    $mw->title("");
     
    $mw->geometry("+0+0");
     
    my $cadreDuBoutonAfficher = $mw->Frame(
       -borderwidth => 1,
       -relief => 'solid',
                             )->place(
                           -relx => 0.0,
                           -rely => 0.04,
                           -relheight => 0.04,
                           -relwidth => 1,
                           -anchor => "nw",
                                       );
     
     
     
    my $boutonAfficher = $cadreDuBoutonAfficher->Button(
                                -text => "Afficher",
                                -command => \&routineAfficher,
                             )->place(
                                          -relx => 0.55,
                                          -rely => 0.0,
                                          -relheight => 1.0,
                                          -relwidth => 0.11,
                                          -anchor => "nw",
                                       );
     
     
    my $cadreBasPourBoutonQuitter = $mw->Frame(
                                -borderwidth => 1,
                                -relief => 'solid',
                             )->place(
                                          -relx => 0.0,
                                          -rely => 1.0,
                                          -relheight => 0.04,
                                          -relwidth => 1.0,
                                          -anchor => "sw",
                                      );
     
     
    my $boutonQuitter = $cadreBasPourBoutonQuitter->Button(
                               -text => "Quitter",
                               -command => \&fermerFenetrePrincipale,
                                   )->pack(
                                           -anchor => 'center',
                                           -fill => 'none',
                                           );
     
     
     
     
     
     
    my $cadreDeLaZoneTexte = $mw->Frame(
                                -borderwidth => 1,
                                -relief => 'solid',
                             )->place(
                                          -relx => 0.55,
                                          -rely => 0.12,
                                          -relheight => 0.42,
                                          -relwidth => 0.45,
                                          -anchor => "nw",
                                 );
     
     
     
    # Dans ce qui suit, on applique $controleTexte sur le cadre
    # et non directement sur la fenêtre principale.
    # Avec cette méthode, les ascenseurs de $controleTexte
    # ne fonctionnent pas
    # si on remplit $controleTexte à l'aide du bouton Afficher.
     
    my $controleTexte = $cadreDeLaZoneTexte->Scrolled("Text",
                              -scrollbars => 'se',
                              -background => 'grey90',
                                                  )->place(
                                          -relx => 0.0,
                                          -rely => 0.63,
                                          -relheight => 0.27,
                                          -relwidth => 1.0,
                                          -anchor => "nw",);
     
     
    # Dans ce qui suit (neutralisé),  on applique $controleTexte
    # directement sur la fenêtre principale.
    # Dans ce cas, les ascenseurs de $controleTexte
    # fonctionnent normalement,
    # qu'on remplisse $controleTexte par le bouton Afficher pendant l'exécution
    # ou qu'on déneutralise avant l'exécution les deux instructions
    # qui le remplissent directement.
     
    # my $controleTexte = $mw->Scrolled("Text",
    #                          -scrollbars => 'se',
    #                          -background => 'grey90',
    #                                              )->place(
    #                                      -relx => 0.55,
    #                                      -rely => 0.26,
    #                                      -relheight => 0.11,
    #                                      -relwidth => 0.45,
    #                                      -anchor => "nw",);
     
     
     
     
     
     
     
    # Si $controleTexte est rempli par les deux instructions
    # qui suivent (et non par la fonction
    # associée au bouton "Afficher"),
    # les ascenseurs de $controleTexte fonctionnent,
    # même si $controleTexte a été appliqué sur le cadre
    # et non directement sur la fenêtre principale.
     
    # my $titrePourDebug = "15 JUIN 2006. - Arrêté du Gouvernement de la Région de Bruxelles-Capitale modifiant l'arrêté du Gouvernement de la Région de Bruxelles-Capitale du 18 juillet 2000 portant règlement de son fonctionnement et réglant la signature des actes du Gouvernement";
     
    # $controleTexte->insert("1.0", $titrePourDebug);
     
     
     
    MainLoop;
     
     
     
     
    sub fermerFenetrePrincipale
    {
      $mw->destroy()
    }
     
     
    sub routineAfficher
    {
     
    # Si $controleTexte a été appliqué sur le cadre
    # et non directement sur la fenêtre principale,
    # si les deux instructions qui suivent
    # se trouvent dans la présente routine
    # (et non plus haut, où elles sont neutralisées),
    # et que, pendant l'exécution du programme,
    # on clique sur le bouton "Afficher",
    # les ascenseurs de $controleTexte ne fonctionnent pas.
     
      my $titrePourDebug = "15 JUIN 2006. - Arrêté du Gouvernement de la Région de Bruxelles-Capitale modifiant l'arrêté du Gouvernement de la Région de Bruxelles-Capitale du 18 juillet 2000 portant règlement de son fonctionnement et réglant la signature des actes du Gouvernement";
     
     
      $controleTexte->insert("1.0", $titrePourDebug);
     
    } # Fin de la sub routineAfficher.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Points : 61
    Points
    61
    Par défaut
    Bonjour.

    Si quelqu'un qui a une version plus récente que 5.8.4 voulait exécuter le script que j'ai mis en ligne et me dire s'il rencontre le même problème, ce serait aimable.

    Si le problème n'existait plus, je pourrais changer de version.

    Merci d'avance.

    M.

  3. #3
    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
    Chez moi ça marche (version 5.8.8, Tk804 ), espérons que le problème ait effectivement été réglé.

    --
    Jedaï

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Jedai
    Chez moi ça marche (version 5.8.8, Tk804 ), espérons que le problème ait effectivement été réglé.

    --
    Jedaï
    Merci beaucoup.

    Je crois que je vais télécharger la version 5.8.8. J'aime mieux ça que supprimer tous les cadres pour accrocher directement les widgets à la fenêtre principale...

    Encore merci.

    M.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Points : 61
    Points
    61
    Par défaut
    Je viens de télécharger la version 5.8.8 mais chez moi, le problème subsiste : quand on clique sur le bouton Afficher, le Scrolled("Text") se remplit du texte prévu, mais il est impossible de lire tout ce texte parce que l'ascenseur est bloqué.

    Cela tiendrait-il à Windows XP ?

    M.

  6. #6
    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
    Je suis sous XP... Par contre je suis un 1280x1024 et pour observer le problème je suis obligé de redimmensionner la fenêtre avant d'appuyer sur "Afficher", vérifiez ce qui se passe chez vous si vous faites ceci.

    --
    Jedaï

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Jedai
    Je suis sous XP... Par contre je suis un 1280x1024 et pour observer le problème je suis obligé de redimmensionner la fenêtre avant d'appuyer sur "Afficher", vérifiez ce qui se passe chez vous si vous faites ceci.

    --
    Jedaï
    Je viens d'essayer.

    Si je redimensionne la fenêtre après avoir cliqué sur "Afficher", l'ascenseur fonctionne, même si je redimensionne ensuite pour revenir aux dimensions initiales.

    Merci du tuyau !

    (Si je redimensionne avant de cliquer sur "Afficher", ça n'aide pas.)

    Si je comprends bien, il y a un bug, mais pas bien grave une fois qu'on connaît votre truc.

    Encore merci.

    M.

  8. #8
    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
    Citation Envoyé par Mersenne
    (Si je redimensionne avant de cliquer sur "Afficher", ça n'aide pas.)
    Dans mon cas ça marche. C'est pourquoi je me demande : avez-vous complètement et proprement désinstallé la version précédente d'ActivePerl avant d'installer la dernière ? Peut-être pourriez vous vérifier si votre version de Tk est bien la 804.

    --
    Jedaï

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Jedai
    Dans mon cas ça marche. C'est pourquoi je me demande : avez-vous complètement et proprement désinstallé la version précédente d'ActivePerl avant d'installer la dernière ? Peut-être pourriez vous vérifier si votre version de Tk est bien la 804.

    --
    Jedaï
    J'avais garé la version précédente dans un répertoire de sauvegarde avant de télécharger la nouvelle.
    Pour être sûr qu'il n'y ait pas d'interférences, j'ai désinstallé les deux versions, chacune avec son installateur / désinstallateur propre, j'ai supprimé ces deux installateurs / désinstallateurs et j'ai de nouveau téléchargé la dernière version, activePerl-5 8.8 (...).

    En résolution 1024 x 768, tout reste comme avant : redimensionner (à l'aide du second des trois petits boutons à droite de la barre de titre) est inutile avant qu'on ait cliqué sur le bouton "Afficher", mais utile après.

    Je suis passé en résolution 1920 x 1024, mais là, les ascenseurs ne fonctionnaient dans aucun cas, que j'utilise le bouton de redimensionnement avant ou après avoir cliqué sur le bouton "Afficher".

    Vous me demandez quelle est ma version de Tk. J'avoue que je ne sais pas où je peux trouver ce renseignement. Dans Perl/Site/Lib/Tk, je n'ai rien vu sur la version.

    Autre aveu : je ne comprends pas pourquoi la fenêtre principale de mon programme est à ce point hors écran si on l'exécute en résolution 1920 x 1024. Si vous pouvez m'éclairer, merci d'avance...

    M.

  10. #10
    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
    Citation Envoyé par Mersenne
    En résolution 1024 x 768, tout reste comme avant : redimensionner (à l'aide du second des trois petits boutons à droite de la barre de titre) est inutile avant qu'on ait cliqué sur le bouton "Afficher", mais utile après.
    A vrai dire quand je dis "redimensionner", je veux dire changer la taille directement (en cliquant et glissant l'un des bords de la fenêtre)

    Citation Envoyé par Mersenne
    Je suis passé en résolution 1920 x 1024, mais là, les ascenseurs ne fonctionnaient dans aucun cas, que j'utilise le bouton de redimensionnement avant ou après avoir cliqué sur le bouton "Afficher".
    Je suppose que vous voulez dire 1280x1024 ? Mais y a-t-il besoin d'ascenseur dans cette résolution ? (Dans mon cas non)

    Citation Envoyé par Mersenne
    Vous me demandez quelle est ma version de Tk. J'avoue que je ne sais pas où je peux trouver ce renseignement. Dans Perl/Site/Lib/Tk, je n'ai rien vu sur la version.
    Dans la documentation, j'ai un fichier Tk::804delta(.html), je suppose que c'est la version de Tk.

    Citation Envoyé par Mersenne
    Autre aveu : je ne comprends pas pourquoi la fenêtre principale de mon programme est à ce point hors écran si on l'exécute en résolution 1920 x 1024. Si vous pouvez m'éclairer, merci d'avance...
    Que voulez-vous dire par "hors écran" ? Mettez un screenshoot en pièce attachée si décrire le phénomène est difficile.

    --
    Jedaï

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Jedai

    Je suppose que vous voulez dire 1280x1024 ? Mais y a-t-il besoin d'ascenseur dans cette résolution ? (Dans mon cas non)
    En effet, je voulais dire 1280x1024. J'ai vraiment été étourdi : en résolution 1280x1024, j'ai remarqué que l'ascenseur restait "disabled" dans tous les cas et j'ai conclu que le problème continuait à se poser, sans prendre garde que, comme vous le dites, il n'y a pas besoin d'ascenseur dans ce cas, le texte apparaissant entier.

    Dans la documentation, j'ai un fichier Tk::804delta(.html), je suppose que c'est la version de Tk.
    J'ai moi aussi ce fichier, donc je suppose que le problème ne vient pas de là.

    Que voulez-vous dire par "hors écran" ? Mettez un screenshoot en pièce attachée si décrire le phénomène est difficile.
    Vous aurez deviné que je ne suis pas un expert.
    Ce que je veux dire, c'est qu'en résolution 1280x1024, tout se passe comme si mon écran ne me montrait qu'une partie d'un écran plus grand. C'est un peu comme un texte qui n'apparaît pas tout entier dans un éditeur et qu'il faut faire défiler : je dois faire "défiler" la fenêtre en plaçant le pointeur de la souris contre un bord de l'écran.
    Il y a peut-être plus malin à faire, mais peu importe, je n'utilise jamais la résolution 1280x1024.

    Ceci dit, il semble que le problème de l'ascenseur bloqué ne se pose pas en résolution 1280x1024, mais je pense qu'il se pose bel et bien en résolution 1024x768.

    Peut-être pourriez-vous essayer dans cette résolution ?

    M.

  12. #12
    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
    J'ai essayé, le bug est effectivement là. En fait vous êtes juste à la limite... Essayez de rajouter une ligne à votre exemple et la scrollbar sera activée, il semblerait que la frame fasse une petite erreur de calcul, et votre exemple est exactement de la longueur que cela affecte !

    Essayez ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    sub routineAfficher
    {
     
      my $titrePourDebug = "15 JUIN 2006. - Arrêté du Gouvernement de la Région de Bruxelles-Capitale modifiant l'arrêté du Gouvernement de la Région de Bruxelles-Capitale du 18 juillet 2000 portant règlement de son fonctionnement et réglant la signature des actes du Gouvernement";
     
      $controleTexte->insert("1.0", $titrePourDebug);
      $controleTexte->SetCursor('end');
      Tk->after(1, sub { $controleTexte->SetCursor('1.0') } );
     
    }
    On peut agir plus directement en activant la scrollbar mais ceci exige de calculer la portion affichée par la zone texte... Si vous voulez être propre vous pouvez le faire.

    (pour votre histoire d'"hors écran", il s'agit bien de quelque chose qui survient lorsque vous changez de résolution, pas spécifiquement avec votre script ? Dans ce cas c'est simplement que le windows manager ne sait pas changer de résolution dynamiquement)

    --
    Jedaï

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Jedai
    On peut agir plus directement en activant la scrollbar mais ceci exige de calculer la portion affichée par la zone texte... Si vous voulez être propre vous pouvez le faire.
    Je crains d'en être incapable... Et puis, puisque bug il y a, ne va-t-il pas déjouer mes calculs ?
    Au fait, y aurait-il un inconvénient à toujours activer les barres de défilement, même quand elles ne sont pas nécessaires ?

    (pour votre histoire d'"hors écran", il s'agit bien de quelque chose qui survient lorsque vous changez de résolution, pas spécifiquement avec votre script ? Dans ce cas c'est simplement que le windows manager ne sait pas changer de résolution dynamiquement)
    En effet, cela survient chaque fois que je passe à la résolution 1280x1024.

    Je vais envoyer un rapport de bogue à l'adresse indiquée dans le fichier Tk::804delta et, en attendant, j'essaierai la première (et plus facile) de vos deux solutions.

    Merci beaucoup pour les réponses.

    M.

  14. #14
    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
    Ok, j'ai trouvé une meilleure solution (LA bonne solution a priori) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sub routineAfficher
    {
     
      my $titrePourDebug = "15 JUIN 2006. - Arrêté du Gouvernement de la Région de Bruxelles-Capitale modifiant l'arrêté du Gouvernement de la Région de Bruxelles-Capitale du 18 juillet 2000 portant règlement de son fonctionnement et réglant la signature des actes du Gouvernement";
     
      $controleTexte->insert("1.0", $titrePourDebug);
      $controleTexte->Subwidget('yscrollbar')->set($controleTexte->yview());
     
    }
    Ce qui est bizarre c'est que le calcul est correct, mais que la scrollbar n'est pas activée alors que si on met plus de lignes elle l'est... Envoie un rapport de bug de toute façon, ça servira toujours.

    --
    Jedaï

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Jedai
    Ok, j'ai trouvé une meilleure solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sub routineAfficher
    {
     
      my $titrePourDebug = "15 JUIN 2006. - Arrêté du Gouvernement de la Région de Bruxelles-Capitale modifiant l'arrêté du Gouvernement de la Région de Bruxelles-Capitale du 18 juillet 2000 portant règlement de son fonctionnement et réglant la signature des actes du Gouvernement";
     
      $controleTexte->insert("1.0", $titrePourDebug);
      $controleTexte->Subwidget('yscrollbar')->set($controleTexte->yview());
     
    }
    Au risque d'abuser, je voudrais encore vous demander des éclaircissements.

    Vous utilisez la méthode set d'une barre de défilement avec comme paramètre $controleTexte->yview().

    D'après Introduction à Perl Tk, de Nancy Walsh, p. 145, cette méthode set prend deux paramètres. La valeur renvoyée par yview() peut-elle convenir comme paramètre de set ?

    M.

  16. #16
    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
    Sauf lorsque je le précise, je teste toujours les solutions que je propose. Dans ce cas yview() renvoie une liste de deux fractions qui correspondent aux arguments de set().

    --
    Jedaï

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Jedai
    Sauf lorsque je le précise, je teste toujours les solutions que je propose. Dans ce cas yview() renvoie une liste de deux fractions qui correspondent aux arguments de set().

    --
    Jedaï

    Ce n'était pas une objection, mais, à moins que je n'aie mal cherché, la valeur renvoyée par yview() n'est pas précisée dans le livre de Nancy Walsh et, pour voir clair plus tôt, j'ai cédé à la tentation de poser la question à quelqu'un qui connaît le sujet.

    Je vais essayer de comprendre tout ça, et en particulier pourquoi votre troisième méthode résout le problème.

    En tout cas, merci beaucoup.

    M.

  18. #18
    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
    Tu peux avoir accès directement à la documentation de chaque Widget avec perldoc (tu tapes en ligne de commande : "perldoc Tk::Text" par exemple, à noter que ActivePerl installe par défaut la doc en HTML pour chaque module, ce qui est plus agréable à l'oeil).

    Ma troisième méthode est en fait la deuxième, c'est-à-dire qu'ayant constaté que la scrollbar n'est pas toujours activée lorsqu'elle le devrait, nous nous chargeons nous même de l'activer en lui fournissant la portion de la zone de texte qui est affichée. En fait nous faisons manuellement le travail qui devrait être effectué automatiquement... Il ne s'agit donc pas vraiment d'un "hack", mais d'une redondance à une action qui devrait toujours être effectuée automatiquement mais qui ne l'est pas dans notre cas, à cause d'un bug, c'est bien plus propre que ma solution précédente (qui consistait à déplacer le curseur en bas du texte, forçant l'activation de la scrollbar, puis à le ramener en haut suffisamment vite pour que l'utilisateur ne s'aperçoive de rien).

    --
    Jedaï

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Jedai
    Tu peux avoir accès directement à la documentation de chaque Widget avec perldoc (tu tapes en ligne de commande : "perldoc Tk::Text" par exemple, à noter que ActivePerl installe par défaut la doc en HTML pour chaque module, ce qui est plus agréable à l'oeil).

    Ma troisième méthode est en fait la deuxième, c'est-à-dire qu'ayant constaté que la scrollbar n'est pas toujours activée lorsqu'elle le devrait, nous nous chargeons nous même de l'activer en lui fournissant la portion de la zone de texte qui est affichée. En fait nous faisons manuellement le travail qui devrait être effectué automatiquement... Il ne s'agit donc pas vraiment d'un "hack", mais d'une redondance à une action qui devrait toujours être effectuée automatiquement mais qui ne l'est pas dans notre cas, à cause d'un bug, c'est bien plus propre que ma solution précédente (qui consistait à déplacer le curseur en bas du texte, forçant l'activation de la scrollbar, puis à le ramener en haut suffisamment vite pour que l'utilisateur ne s'aperçoive de rien).

    --
    Jedaï
    Je trouve votre dernier message en me levant.
    La troisième méthode me semble en effet propre et élégante.
    Meilleure que de supprimer les cadres, comme j'avais envisagé de le faire...
    J'ai envoyé un rapport de bogue à Nick Ing-Simmons.

    Encore merci, voilà encore quelque chose de bon sur developpez.net.

    M.

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