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
|
#!/usr/bin/perl
use strict;
use warnings;
use Tk;
use Tk::PNG;
use GD::Graph::bars;
my $fen_principale = MainWindow->new();
$fen_principale->title("Generer graphique");
#creation d'un frame (cadre)
my $cadre = $fen_principale->Frame();
#Liste des couleurs
my @couleurs = qw/Noir Bleu Vert Rose Rouge Jaune/;
my $liste_couleur = $cadre->Scrolled("Listbox",-scrollbars => "e",
-selectmode => "single",
-height => 5,
-exportselection => 0, # permet à deux listes d'avoir des selection au même moment
);
$liste_couleur->insert("end", @couleurs);
# Placer une image
my $chemin_image = "monimage.png";
my $ref_Photo = $cadre -> Photo ( "-format" => "png", ) ;
my $ref_label = $cadre -> Label ( -image => $ref_Photo ) ;
# bouton generation graphique
my $BoutonGraphique = $fen_principale->Button(-text=>"Générer graphique",
-command=>[\&creer_graphique, $fen_principale, $liste_couleur, $ref_Photo, \$chemin_image]
);
# bouton generation graphique
my $BoutonQuitter = $fen_principale->Button(-text=>"Quitter", -command=>\&Quitter,);
#positionnement
$cadre->pack(-side=>"top",-anchor=>"n");
$liste_couleur->pack(-side=>"left");
$ref_label->pack(-side=>"right");
$BoutonGraphique->pack(-side=>"top",-padx=>10,-pady=>10,-fill=>"both");
$BoutonQuitter->pack(-side=>"bottom",-padx=>10,-pady=>10,-fill=>"both");
MainLoop;
sub creer_graphique {
my ($fen_principale, $liste_couleur, $ref_Photo, $ref_chemin_image) = @_;
my $image = ${$ref_chemin_image};
# on teste si couleur verte
my $couleur = $liste_couleur->get($liste_couleur->curselection());
my %correspondance_couleur = (
"Vert" => "green",
"Noir" => "black",
"Bleu" => "blue",
"Rose" => "pink",
"Rouge" => "red",
"Jaune" => "yellow",
);
my @data = (
["0", "1", "2", "3", "4", "5", "6"],
[ 0, 15, 8, 30, 5, 0, 20]
);
my $graph = GD::Graph::bars->new(600,400);
$graph->set(
x_label => "Heure",
y_label => "Nombres de visiteurs",
title => "Affluence selon l'heure de la journée",
dclrs => [ ($correspondance_couleur{$couleur}) ],
);
my $gd = $graph->plot(\@data);
open(my $fh,">$image") or die "Erreur ecriture sur $image $!";
binmode $fh;
print {$fh} $gd->png;
close $fh;
#On affiche l'image
$ref_Photo->configure(-file=>$image);
return;
}
sub Quitter {
exit;
return;
} |
Partager