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] Module Tk::MesgBox (et non messageBox)


Sujet :

Interfaces Graphiques Perl

  1. #1
    Membre confirmé
    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
    Par défaut [Perl Tk] Module Tk::MesgBox (et non messageBox)
    Bonsoir.

    J'ai eu la curiosité de télécharger le module Tk::MesgBox, qui fournit une alternative au messageBox.
    Dans mon programme, deux lignes du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my $msg = $monWidgetTexte->MesgBox( -text => "Bonjour");
    $msg->Show;
    ont provoqué l'objection :
    "Tk::Error: can't make ".toplevel.frame1.textundo.mesgbox" its own master at C:/Perl/site/lib/Tk/Submethods.pm line 37.
    at C:/Perl/site/lib/Tk/MesgBox.pm line 62
    Tk callback for wm
    (menu invoke)"

    Si je comprends bien, c'est le module Tk::MesgBox qui est en cause. Je reproduis la routine où figure la ligne 62 de ce module :
    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
     
    sub Populate {
        my ($win, $args) = @_;
     
        my %arg = (
            -title => 'Message',
            -text => 'Press OK to continue...',
            -textfg => 'black',
            -textbg => 'lightgrey',
            -icon => undef,
            -defbutton => 'OK',    
            -canbutton  => '', # Usually 'Cancel'.
            -buttons => ['OK'],
            -buttonpadx => 0,
            -buttonpady => 0,
            -buttonfg => 'black',
            -buttonbg => 'lightgrey',
            -buttonHL => 'lightgrey',
            -buttonfont => '-*-helvetica-bold-r-*-*-12-*-*-*-*-*-*-*',
            -aspect => 500,
            -justify => 'center',
            -bindctrl => 1,
            -bindalt => 1,
            -bindord => 1,
            %$args, 
            );
     
        # We don't delete the title.
        delete @{$args}{qw(
            -text -textfg -textbg -icon -defbutton -canbutton
            -buttons -aspect -justify -bindctrl -bindalt
            -bindord -buttonpadx -buttonpady -buttonfg
            -buttonbg -buttonfont -buttonHL -buttonfont
            )};
     
        $win->SUPER::Populate($args);
     
        $win->withdraw;
        $win->iconname($arg{-title});
        $win->protocol('WM_DELETE_WINDOW' => sub { });
        $win->transient($win->toplevel); #### Problème.
     
        $win->{-default_button} = &create_buttons($win, %arg);
        &create_text_frame($win, %arg);
     
        $win->{-selected_button} = '';
    }
    La ligne 62 du module est la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        $win->transient($win->toplevel);

    On dirait donc qu'il y a un bug dans ce module (bizarre tout de même, car il rend le module inutilisable, donc on aurait dû s'en rendre compte).

    Peut-être faudrait-il
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        $win->transient($win->parent());
    ?

    Merci d'avance pour tout avis.
    M.

  2. #2
    Membre confirmé
    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
    Par défaut
    On dirait que c'est un bug connu et qu'on déconseille maintenant MesgBox.
    Voyez :
    http://groups.google.fr/group/comp.l...76ab5055948b07
    Donc je n'insiste pas.
    M.

  3. #3
    Membre confirmé
    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
    Par défaut
    Bonsoir.

    Le bug de l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $win->transient($win->toplevel);
    c'est peut-être simplement que $win désigne un Toplevel et donc que $win->toplevel() renvoie $win, de sorte que l'instruction revient à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $win->transient($win);
    d'où le message qu'un widget ne peut pas être son propre maître ?
    Cordialement,
    M.

Discussions similaires

  1. PERL et modules
    Par Lisa_ffe31 dans le forum Langage
    Réponses: 4
    Dernier message: 19/02/2008, 10h05
  2. Deux versions de perl et modules
    Par flb-iori dans le forum Modules
    Réponses: 9
    Dernier message: 09/11/2007, 03h01
  3. [xml/perl] quel module ?
    Par Lockless dans le forum Modules
    Réponses: 5
    Dernier message: 28/06/2006, 17h31
  4. [Module de classe] Fonction non liée à l'instance?
    Par Caroline1 dans le forum Access
    Réponses: 6
    Dernier message: 07/04/2006, 20h13
  5. mac os X, perl et modules
    Par stoyak dans le forum Modules
    Réponses: 6
    Dernier message: 31/10/2005, 09h09

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