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 :

affectation de fonction dans des sous-menus


Sujet :

Interfaces Graphiques Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut affectation de fonction dans des sous-menus
    Bonjour,

    j'ai commencé mon stage il y a 2 semaines, en reprenant le code d'un ancien camarade. Mon problème est le suivant :

    Le programme doit permettre d'ouvrir ou de créer différents types de fichiers. Il y a environ 6 à 8 fonctions pour créer un fichier, et autant pour l'ouverture. J'ai créé un menu fichier, et des sous menus, un pour les fonctions d'ouverture de fichier, un autre pour la création de fichiers.

    Jusque là pas de problème.

    Ce qui se complique c'est que pour chaque commande présente dans chaque sous-menu, je dois y affecter une fonction précise.

    Voici le morceau de code en question (le reste du code contient les fonctions en elle même, mais là dessus pas de problème c'est surtout l'appel des fonction qui ne marche 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
    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
    #Création du menu fichier, avec des sous-menus
    #tableau contenant toutes les fonctions à lancer
    @fonction=('creerAfficherInf','creerafficherDonClassique','creerafficherDonavcan','creerAfficherLoi','creerAfficherCan','creerAfficherMaskcla','creerAfficherCancla','creerAfficherChgt','creerAfficherChgclass','ouvrirInf','ouvrirDon','ouvrirLoi','ouvrirCan','ouvrirMaskcla','ouvrirCancla','ouvrirChgt','ouvrirChgclass');
    #tableau contenant les noms des sous menus
    @fichier = ("Nouveau...","Ouvrir");
    #tableau contenant le nom des commandes dans le sous-menu Nouveau...
    my @Nouveau = ("fichier .INF","fichier .DON classique","fichier .DON canal temporel \& spectral","fichier .LOI","fichier .CAN","fichier .MASKCLA","fichier .CANCLA","fichier .CHGT","fichier .CHGCLASS");
    #tableau contenant le nom des commandes dans le sous-menu Ouvrir
    my @Ouvrir =("fichier .INF","fichier .DON","fichier .LOI","fichier .CAN","fichier .MASKCLA","fichier .CANCLA","fichier .CHGT","fichier .CHGCLASS");
    #On précise quelles commandes correspondent à quel sous-menu
    %sous_menu = (
    	"Nouveau..." => \@Nouveau,
    	Ouvrir => \@Ouvrir);
     
    my %sous_menuref;
     
    use Tk;
    use Tk::Balloon;
    use Tk::NoteBook ;
    use Tk::Dialog;
     
    $fenetre = new MainWindow();
    $fenetre -> maxsize(640,600);
    $fenetre -> minsize(640,600);
    $fenetre -> title("Cesbio TITE");
     
    $zoneMenu = $fenetre->Frame(-relief=>groove);
    #création du menu Fichier
    my $b_menu = $zoneMenu->Menubutton (-text => 'Fichier',-relief => 'flat' ,-tearoff => 0,-menuitems=>[
    			['command' => 'Quitter',-command=>sub{exit(0);}]
    			])->pack(-side=>'left');
    #création du menu Création
    my $c_menu = $zoneMenu->Menubutton (-text => 'Création',-relief => 'flat' ,-tearoff => 0,-menuitems=>[
    			['command' => 'auto_max_vrai07',-command=>\&lancerAuto_max_vrai],
    			['command' => 'auto_comp_matcnf04',-command=>\&lancerAuto_comp],
    			])->pack(-side=>'left');
     
    #Création des sous menus avec leurs commandes
    foreach my $m (@fichier) {
    	$sous_menuref{$m} = $b_menu->menu->Menu;
    	#print"@{$sous_menu{$m}}\n";
    	@a=values(%sous_menu);
    	#print "@a\n";
        map( $sous_menuref{$m}->add('command',-label => $_), @{$sous_menu{$m}} );
    	$b_menu->cascade(-label => $m);	
    	#affichage des contenus des sous-menus Nouveau... et Ouvrir
    	$b_menu->entryconfigure($m, -menu => $sous_menuref{$m});
        }
     
    $zoneMenu->pack(-side=>'top',-anchor=>'n',-expand=>1,-fill=>'x');
     
    $fenetre -> Label(-text=>"Gestion de fichier TITE")->pack(-side=>'top',-anchor=>'n');
    $zoneRecap = $fenetre -> Scrolled("Text",-width=>70,-height=>70,-background=>"white")->pack();
     
    MainLoop();
    J'ai utilisé le "cours mongeurs", qui m'a permis de créer les sous-menus, mais ils ne parlent pas d'affectation de fonctions aux commandes présentes dans les sous-menus.

    Merci d'avance de votre aide.

  2. #2
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Please, évitez de mettre du code non indenté et avec des erreurs. Pour vous aider en Perl/TK, on a besoin de testé vos codes quand ce n'est pas trivial, donc déposez du code lisible et sans erreurs :

    Voici le code indenté sans erreur :

    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
    #!/usr/bin/perl
    use warnings;
    use strict;
     
    use Tk;
    use Tk::Balloon;
    use Tk::NoteBook;
    use Tk::Dialog;
     
    #Création du menu fichier, avec des sous-menus
    #tableau contenant toutes les fonctions à lancer
    my @fonction = (
        'creerAfficherInf',      'creerafficherDonClassique',
        'creerafficherDonavcan', 'creerAfficherLoi',
        'creerAfficherCan',      'creerAfficherMaskcla',
        'creerAfficherCancla',   'creerAfficherChgt',
        'creerAfficherChgclass', 'ouvrirInf',
        'ouvrirDon',             'ouvrirLoi',
        'ouvrirCan',             'ouvrirMaskcla',
        'ouvrirCancla',          'ouvrirChgt',
        'ouvrirChgclass',
    );
     
    #tableau contenant les noms des sous menus
    my @fichier = ( "Nouveau...", "Ouvrir" );
     
    #tableau contenant le nom des commandes dans le sous-menu Nouveau...
    my @Nouveau = (
        "fichier .INF",
        "fichier .DON classique",
        "fichier .DON canal temporel \& spectral",
        "fichier .LOI",
        "fichier .CAN",
        "fichier .MASKCLA",
        "fichier .CANCLA",
        "fichier .CHGT",
        "fichier .CHGCLASS",
    );
     
    #tableau contenant le nom des commandes dans le sous-menu Ouvrir
    my @Ouvrir = (
        "fichier .INF",
        "fichier .DON",
        "fichier .LOI",
        "fichier .CAN",
        "fichier .MASKCLA",
        "fichier .CANCLA",
        "fichier .CHGT",
        "fichier .CHGCLASS",
    );
     
    #On précise quelles commandes correspondent à quel sous-menu
    my %sous_menu = (
        "Nouveau..." => \@Nouveau,
        Ouvrir       => \@Ouvrir
    );
     
    my %sous_menuref;
     
    my $fenetre = new MainWindow();
    $fenetre->maxsize( 640, 600 );
    $fenetre->minsize( 640, 600 );
    $fenetre->title("Cesbio TITE");
     
    my $zoneMenu = $fenetre->Frame( -relief => 'groove' );
     
    #création du menu Fichier
    my $b_menu = $zoneMenu->Menubutton(
        -text      => 'Fichier',
        -relief    => 'flat',
        -tearoff   => 0,
        -menuitems => [ [ 'command' => 'Quitter', -command => sub { exit(0); } ] ]
    )->pack( -side => 'left' );
     
    #création du menu Création
    my $c_menu = $zoneMenu->Menubutton(
        -text      => 'Création',
        -relief    => 'flat',
        -tearoff   => 0,
        -menuitems => [
            [ 'command' => 'auto_max_vrai07', -command => \&lancerAuto_max_vrai ],
            [ 'command' => 'auto_comp_matcnf04', -command => \&lancerAuto_comp ],
        ]
    )->pack( -side => 'left' );
     
    #Création des sous menus avec leurs commandes
    foreach my $m (@fichier) {
        $sous_menuref{$m} = $b_menu->menu->Menu;
     
        #print"@{$sous_menu{$m}}\n";
        my @a = values(%sous_menu);
     
        #print "@a\n";
        map( $sous_menuref{$m}->add( 'command', -label => $_ ),
            @{ $sous_menu{$m} } );
        $b_menu->cascade( -label => $m );
     
        #affichage des contenus des sous-menus Nouveau... et Ouvrir
        $b_menu->entryconfigure( $m, -menu => $sous_menuref{$m} );
    }
     
    $zoneMenu->pack( -side => 'top', -anchor => 'n', -expand => 1, -fill => 'x' );
     
    $fenetre->Label( -text => "Gestion de fichier TITE" )
        ->pack( -side => 'top', -anchor => 'n' );
    my $zoneRecap = $fenetre->Scrolled(
        "Text",
        -width      => 70,
        -height     => 70,
        -background => "white"
    )->pack();
     
    MainLoop();

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    Oups désolé, ce n'était pas volontaire de ma part

    Sinon d'après toi, et si je me suis bien exprimé, est-ce qu'il est possible de faire ce que je demande, ou bien je dois laisser tomber ? Ce n'est pas de la plus haute importance, mais disons que ça rendrait l'interface que je dois réaliser plus conviviale.

    Merci d"avance de ta réponse.

  4. #4
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    oui tout c'est tout à fait faisable très facilement.
    Tu peux faire autant de sous menu que tu souhaites avec en fin de cascade une action.
    J'essaye de te faire un petit d'exemple pour que tu puisses te baser dessus

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    Merci beaucoup, ça fait bien 10 jours que je galère dessus !!!

    Par contre, comme tu me dit que ça se fait facilement, j'ai l'impression de passer pour un imbécile

  6. #6
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Désolé pour le facilement, c'était juste pour te dire que c'est faisable et de ne pas désespérer.

  7. #7
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    Bonjour !

    Eh bien cela faisait longtemps que je n'étais pas venu, mais j'attendais de voir si des grosses erreurs ne venaient pas pourrir mon code .

    Je viens de finir les dernières corrections pour les variables non déclarés, et miracle, je n'ai plus d'erreurs !!! Certes mon code aurait je pense pu être plus simple, mais n'ayant pas d'énormes connaissance en Perl j'ai fait avec les moyens du bord.

    Maintenant que ce sujet est résolu, je souhaiterais remercier tous ceux qui ont essayé de m'aider, que ce soit activement (Djibril), mais je pense aussi aux personnes qui ont certainement essayer de m'aider mais qui n'ont pas trouver de solution.

    Merci beaucoup à tous !

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

Discussions similaires

  1. Appel de fonction dans des sous dossiers
    Par milach dans le forum MATLAB
    Réponses: 1
    Dernier message: 03/01/2008, 14h24
  2. Recherche de fichiers dans des sous répertoires
    Par Mimi Bulles dans le forum Langage
    Réponses: 8
    Dernier message: 25/04/2006, 16h41
  3. Filtrages dans des sous-formulaires
    Par Smint dans le forum Access
    Réponses: 4
    Dernier message: 20/09/2005, 13h56
  4. Trouver une fonctions dans des DLL
    Par Mercenary Developer dans le forum Langage
    Réponses: 2
    Dernier message: 08/09/2005, 15h28
  5. Chemin d'accès des fichiers dans des sous rep
    Par Le Veilleur dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/11/2004, 14h37

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