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.